每当我尝试按 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;
}
答案 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时它在循环内部,最后一部分永远不会执行。