Я смущен о поведении scanf при обработке пробелов.scanf buffering с вкладками и новыми линиями
Вот код, я использую:
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 оставляет пустое пространство в буфере по умолчанию. Вместо этого он печатает «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");
}