Принимает ли scanf () '\ n' в качестве остатка ввода от предыдущего scanf ()? - PullRequest
5 голосов
/ 29 ноября 2009

В следующем коде C:

char name[20];
int a;
int b;

for(i=0;i<10;i++)
{
    printf("\nEnter name, a & b: ");
    scanf("%s %d %d",name,&a,&b);
}

читает scanf в '\n', введенном в конце scanf() в 1-й итерации, для входных данных 2-й итерации?

1 Ответ

5 голосов
/ 29 ноября 2009

scanf оставляет входной поток, указывающий на \n. В вашем случае это не имеет значения: каждый раз, когда он вызывается, scanf будет перемещаться, пока не найдет следующий непробельный символ. Таким образом, если указать 10 строк name, a, b, все будет работать так, как вы ожидаете.

Но учтите это:

scanf("%d", &a);
fgets(str, 20, stdin);

fgets читает, пока не найдет первый символ новой строки, поэтому str просто получит значение \n, а fgets не прочитает следующую строку ввода.

...