我的程序基本上要求用户输入一个未定义的浮点数,我希望程序输入用户输入EOF时的最小值,最大值和值的平均值。
现在,当用户输入数字<= -100,000或=&gt;时,循环退出并输出最小值,最大值和平均值。 100,000,这是程序对用户输入的限制。
#include <stdio.h>
int main()
{
float sum, smallest, largest;
float value, average,check;
int count;
sum = 0.000000;
count = 0;
check = scanf(" %f",&value);
smallest = value;
largest = value;
while (value >= -100000 && value <= 100000)
{
sum += value;
count++;
if (value > largest)
largest = value;
else if (value < smallest)
smallest = value;
scanf(" %f",&value);
}
average = sum / count;
printf("%.2f ",smallest);
printf("%.2f ",largest);
printf("%.2f\n",average);
return 0;
}
答案 0 :(得分:2)
您希望如何处理错误(非数字)输入?
最简单的方法可能如下:
while ( scanf( "%f", &value ) == 1 && value >= -100000 && value <= 100000 )
{
// do stuff with value
}
这将循环直到value
超出指定范围或 scanf
输入失败,原因是匹配失败(输入不是数字)或因为已发出EOF信号,或者由于某些其他输入错误。
请注意&&
运营商强制进行从左到右的评估;在进行测试之前,scanf
调用将被执行并value
更新。
另请注意,如果用户输入的数字包含12.3r
之类的非数字尾随字符,则scanf
会转换并将12.3
分配给value
并离开{ {1}}卡在输入流中,这将导致下一次调用r
失败,此时循环将退出。
答案 1 :(得分:1)
正如其他人所指出的那样,使用scanf结果。 而且您不需要从2个位置调用scanf。 我建议这样的事情:
#include <stdio.h>
int main()
{
float sum, smallest, largest, value, average;
int count;
for (count = sum = 0; scanf("%f", &value) == 1; count++) {
if (value <= -100000 || value >= 100000)
break;
sum += value;
if (count == 0)
smallest = largest = value;
else if (value > largest)
largest = value;
else if (value < smallest)
smallest = value;
}
if (count) {
average = sum / count;
printf("%.2f %.2f %.2f\n", smallest, largest, average);
} else {
printf("error, no data processed\n");
}
return 0;
}