在while循环后,C将无法完成读取程序

时间:2014-01-09 14:54:49

标签: c

每当我尝试按 Ctrl-Z while循环时,它都不会打印出平均值。

#include <stdio.h>

int main(void)
{
    float a;
    float b = 0;
    int counter = 0;
    while(1){
        scanf("%f", &a);
        b += a;
        counter++;
    }

    float average = b/counter;
    printf("%f", average);
    return 0;
}

5 个答案:

答案 0 :(得分:4)

因为break没有条件输出(终止)循环,即这是一个无限循环。

请改为尝试:

while(1){
    if(scanf("%f", &a) == 1)
    {
        b += a;
        counter++;
    }
    else break;
    }
}  

现在,按 Ctrl + Z (如问题中所述)将终止循环。

答案 1 :(得分:4)

如果你在Linux中并期望 Ctrl + Z 来完成输入,那你就错了。它是 Ctrl + D ,但它在Windows中是 Ctrl + Z

(Linux中的 Ctrl + Z 通常(在Bash和其他shell中)暂停程序,这意味着它暂时停止但仍然作为进程存在。 )

您应该将循环更改为:

while(scanf("%f", &a) == 1)
{
  b += a;
  ++counter;
}

然后再次使用EOF键盘序列(或只是一些非数字输入)。

答案 2 :(得分:1)

经验法则:

从不使用无限循环,而不确保您拥有 hitable break声明。

#include <stdio.h>

int main(void)
{
    float a;
    float b = 0;
    int counter = 0;
    while(1){
        if(scanf("%f", &a) == 1)
        {
           b += a;
           counter++;
        }
        else break;
    }

    float average = b/counter;
    printf("%f", average);
    return 0;
}

答案 3 :(得分:0)

而不是while(1),你需要测试eof()。

尝试while(scant("%f", &a) == 1)

请参阅scant()的手册页,并在底部查看有关返回值的内容。

答案 4 :(得分:0)

您的控件Z正在影响整个程序,因为当您点击cntrl-Z时它在循环内部,最后一部分永远不会执行。