通过EOF打破循环

时间:2014-03-09 22:16:42

标签: c while-loop eof

我正在努力解决这个问题,我需要你的帮助。

我有这段代码......

while(a != EOF){
  scanf("%f",&a);
  ...
}

...我想通过按CTRL + D来终止此循环。它有效,但我需要按两次。我试着用这个

while(getchar() != EOF){
  scanf("%f",&a);
  ...
}

但结果相同。有没有办法通过按CTRL + D一次结束这个循环? 感谢您的回复。

5 个答案:

答案 0 :(得分:2)

您可以直接在scanf中检查EOF:

while (scanf("%f",&a) != EOF) {
    ...
}

有关详细信息,请阅读scanf上的文档(an example)。

答案 1 :(得分:1)

您应该检查调用scanf的结果,不仅仅是针对EOF,还要确保正确解析值。 scanf返回已成功扫描的项目数,在您的特定情况下,如果成功扫描一个浮点数,它将返回1。如果解析不成功,那么在此之后你就不能依赖a的值。

int result;
do
{
    while ((result = scanf("%f", &a)) != EOF)
    if (result == 1)
    {
        // scan was successful, you can safely use the value of "a"
    }
    else
    {
        // scan was unsuccessful
        // you can skip to the next line, produce an error, etc.
    }
}

答案 2 :(得分:0)

尝试测试scanf()的回报:如果您的信息流已结束,则会返回EOF

答案 3 :(得分:0)

您至少有两个解决方案:

予。

while (scanf("%f",&a) != EOF) { ... }

II。 从File Descriptor获得一个

答案 4 :(得分:0)

试试这个,这对你有帮助:

while(1) {
    scanf("%f",&a);
    if(a==EOF)
    break;
    ......
}