Мы знаем, что stdin
по умолчанию является буферизованным входом; доказательство этого заключается в использовании любого из механизмов, которые "оставляют данные" на stdin
, например scanf()
:
int main()
{
char c[10] = {'\0'};
scanf("%9s", c);
printf("%s, and left is: %d\n", c, getchar());
return 0;
}
./a.out
привет
привет, а слева - 10
10
является новой линией, конечно...
Мне всегда было любопытно, есть ли способ "заглянуть" в буфер stdin
, не удаляя все, что может там проживать?
ИЗМЕНИТЬ
Лучший пример может быть:
scanf("%9[^.]", c);
При вводе "at.ct" теперь у меня есть "данные" (ct\n
), оставшиеся на stdin
, а не только символ новой строки.