空白を処理するときの scanf の動作について混乱しています。
私が使用しているコードは次のとおりです。
int main()
{
int val;
int c;
scanf("%d\t", &val);
c = getchar();
if(c == EOF)
printf("eof");
else if(c == '\t')
printf("tab");
else if(c == '\n')
printf("newline");
}
そして、ここに私が渡している入力があります:
1234<tab><newline>
scanf はタブのみを探しており、おそらく scanf はデフォルトでバッファに空白を残すため、これは「改行」を出力することを期待しています。代わりに、「eof」を出力します。は%d\t
改行を飲み込んでいるようです。
scanf の仕組みについて何か不足していますか?
次のように変更すると、「改行」が正しく出力されることに注意してください。
int main()
{
int val;
int c;
scanf("%d", &val);
getchar(); /* note this extra getchar */
c = getchar();
if(c == EOF)
printf("eof");
else if(c == '\t')
printf("tab");
else if(c == '\n')
printf("newline");
}