0
我送入標準輸入 「11 + 3」 用下面的代碼,並與ungetc函數()意外的行爲
void main(void) {
int number;
printf("the first call : %d\n", scanf("%d", &number));
char ch = fgetc(stdin);
ungetc(ch, stdin);
printf("the second call : %d\n", scanf("%d", &number));
}
的結果似乎很奇怪,我因爲第二scanf()的應該有失敗。僅供參考,我在Ubuntu 5.4.0-6ubuntu1〜16.04.4下使用了gcc 5.4.0 20160609。
the first call : 1
the second call : 1
爲什麼它應該失敗? +3是scanf解析的有效數字。 – StoryTeller
@StoryTeller我沒想到。如果「+」和數字之間有空格,會怎麼樣?第二個電話應該還能工作嗎? – b1sub
對不起。那麼它會失敗,是的。 scanf讀取whitesapce分隔的輸入。所以+和3現在是單獨的「令牌」。 – StoryTeller