scanf()将’\ n’作为前一个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()在第一次迭代中在scanf()末尾输入的'\n'读取吗?

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

但考虑一下:

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

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