scanf()函数会将上一个scanf()函数输入中剩余的'\n'作为下一个输入,这是真的吗?

5
在下面的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);
}
< p > scanf 在第一次迭代中读取 scanf() 结尾输入的 '\n',对于第二次迭代的输入呢?


2
为什么不尝试通过调试器运行此代码并观察发生了什么?如果出现意外或不清楚的情况,请就该方面发布一个问题。 - ChrisF
1个回答

5

scanf函数会让输入流指向\n,在您的情况下这没有影响:每次调用scanf函数时,它都会一直移动直到找到下一个非空格字符。因此,将10行name, a, b作为输入将按照您的预期工作。

但请考虑以下情况:

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

fgets 函数会读取直到找到第一个换行符,所以 str 只会得到一个值为 \n 的结果,fgets 不会读取下一行输入。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接