Очищается ли входной буфер после чтения scanf? - PullRequest
0 голосов
/ 06 мая 2020

Очищается ли буфер ввода после scanf чтения?

#include <stdio.h>

int main(void) 
{
    int a, b;
    scanf("%d", &a);//I inputted 3
    scanf("%d", &b);//I inputted 4
}

Итак, когда я ввел ввод, 4 было 3 во входном буфере?

Ответы [ 2 ]

1 голос
/ 06 мая 2020

Значит, когда я ввел 4, во входном буфере присутствовало 3?

Нет, 3 были израсходованы.

Вы не можете его перечитать ( как int или иначе).

Если вы вводите "3<enter>", 3 будет использовано, а буфер содержит только "<enter>". Затем вы набираете "4<enter>", которое добавляется в буфер. Второй scanf (*) использует начальный ввод и 4 оставшихся "<enter>" для следующей операции ввода.

(*) спецификатор преобразования "%d" пропускает необязательные ведущие пробелы и (пытается) преобразовывает остальные ввода в целое число (если ошибок нет).

0 голосов
/ 06 мая 2020

Значит, когда я ввел 4, во входном буфере присутствовало 3?

Нет, не было.

scanf() читает (и потребляет) из стандартного ввода, пока не будет найдено совпадение в указанном формате (в вашем случае целое число). Этот формат также преобразуется и используется.

...