格式說明%s
跳過空格領先,即任何'\n'
,' '
,'\t'
,...將被忽略,s[0]
將包含輸入的第一個非空格。
爲了證明什麼在scanf
回事一點點,請看下面的例子,它利用了"%n"
-feature的scanf
,這還給該迄今已處理的字符數;我用sscanf
這樣的結果不依賴於用戶輸入。請注意,字符串在閱讀的時候,scanf
處理比存儲在結果更多的字符:
#include<stdio.h>
int main(void){
int n;
int pos;
char s[10];
const char* simulatedInput = "123\n abcde";
const char* inputPtr = simulatedInput;
sscanf(inputPtr,"%d%n",&n,&pos);
printf("sscanf on %s processed %d charaters; result n: %d\n", inputPtr, pos, n);
inputPtr += pos; // inputPtr will point at the position of '\n'
sscanf(inputPtr,"%s%n",s,&pos);
printf("sscanf on %s processed %d charaters; yet s as '%s' contains only %lu characters\n", inputPtr, pos, s, strlen(s));
return 0;
}
輸出:
sscanf on 123
abcde processed 3 charaters; result n: 123
sscanf on
abcde processed 11 charaters; yet s as 'abcde' contains only 5 characters
@xing非常感謝你。我不知道。 –
通常,它只會導致後續的「%c」格式說明符出現問題,除非特別指示爲使用'「%c」',否則不會自動跳過前導空格。 –
「...因爲在輸入緩衝區中應該有一個」\ n「...」 - 你從哪裏得到這個想法? 'scanf'完全不關心'\ n'。對於'scanf','\ n'只是另一個空格字符。 – AnT