scanf()将'\ n'作为前一个scanf()的剩余输入吗?

时间:2009-11-29 16:32:36

标签: c scanf

在以下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 个答案:

答案 0 :(得分:5)

scanf使输入流指向\n。在你的情况下,它没有什么区别:每次调用它时,scanf将一直移动,直到找到下一个非空白字符。因此,输入10行name, a, b作为输入将按预期工作。

但请考虑一下:

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

fgets读取,直到找到第一个换行符,因此str只会获得\n的值,而fgets阅读下一行输入。