关于C#:scanf()是否使用’ ‘作为上一个scanf()的剩余输入?

Does scanf() take '
' as input leftover from previous scanf()?

在下面的C代码中:

1
2
3
4
5
6
7
8
9
10
char name[20];
int a;
int b;

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

在第一次迭代中,scanf会读入在scanf()末尾输入的'
'
中,用于第二次迭代输入吗?


scanf使输入流指向
。 对于您而言,这没有什么区别:每次调用它时,scanf都会一直移动直到找到下一个非空白字符。 因此,给它10行name, a, b作为输入将按预期工作。

但是考虑一下:

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

fgets进行读取,直到找到第一个换行符为止,因此str只会得到
的值,而fgets不会读取输入的下一行。