0
は、私は次のコードで "11 + 3" 標準入力に供給され、第二のscanf()はを持っている必要があるので予期しない動作が
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));
}
結果は私には奇妙に見えました失敗しました。参考までに、私はgcc 5.4.0 20160609をUbuntu 5.4.0-6ubuntu1〜16.04.4で使用しました。
the first call : 1
the second call : 1
なぜ失敗する必要がありますか? +3は、scanfが解析するための有効な数値です。 – StoryTeller
@StoryTeller私はそれを期待していませんでした。 '+'と数字の間に空白がある場合はどうなりますか? 2番目の呼び出しはまだ機能する必要がありますか? – b1sub
申し訳ありません。それから失敗するはずです。 scanfはホワイトスペース区切りの入力を読み取ります。 +と3は別々の "トークン"になりました。 – StoryTeller