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

5 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);
}
Run Code Online (Sandbox Code Playgroud)

scanf读的'\n',在年底进入了scanf()在第一次迭代,为第二次迭代的输入?

int*_*nt3 5

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

但考虑一下:

scanf("%d", &a);
fgets(str, 20, stdin);
Run Code Online (Sandbox Code Playgroud)

fgets读取直到它找到第一个换行符,所以str只会得到的值\n,并且fgets读取输入的下一行.