在处理我想在输入的每一行上执行的不同操作时,我偶然发现了一个问题-一个说明我的意思的简单代码如下:
#include<cstdio>
using namespace std;
int main()
{
char testCstring[100];
int howManyLines;
scanf("%d", &howManyLines);
for(int i = 0; i < howManyLines; ++i)
{
fgets(testCstring, 100, stdin);
}
}
因此,这实际上是基本的-只是重复howManyLines
读取输入中的一行的时间(当然,通常我以后会用它来执行一些操作,只需在此处剪掉它来显示问题)。令我惊讶的是,它总是比应执行的次数少迭代一次,因此,如果我给他,则允许我不输入任何行1
。怎么会?当然,用printf
for代替fgets
会使循环正常运行。为什么在这里跳过一个迭代?
尝试更改scanf("%d")
为scanf("%d\n")
。否则,它将读取数字(可能是空字符串)之后的任何内容作为第一行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句