循环的迭代次数应该比预期的少

直管

在处理我想在输入的每一行上执行的不同操作时,我偶然发现了一个问题-一个说明我的意思的简单代码如下:

#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怎么会?当然,用printffor代替fgets会使循环正常运行。为什么在这里跳过一个迭代?

杰里米·鲁滕(Jeremy Ruten)

尝试更改scanf("%d")scanf("%d\n")否则,它将读取数字(可能是空字符串)之后的任何内容作为第一行。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章