请看一个提示用户输入 3 个值并计算这些值的平均值的程序。 我决定添加一个测试条件来检查用户是否输入了数字或字符。
// a program that calculates the average of an array of 3 floating-point values; with for loop
#include <stdio.h>
int main (void)
{
float values[3];
float element;
float sum = 0;
int i;
printf ("Please, enter 3 floating values: \n");
for ( i = 0; i < 3; i++)
{
if (scanf ("%f", &element) == 1)
{
if ( (element >= 'a' && element <= 'z') || (element >= 'A' && element <= 'Z') )
printf ("Sorry, you have entered letters\n");
else if (element <= 0)
printf ("Please, enter positive values\n");
else
values[i] = element;
sum += values[i];
}
}
printf ("The average of 3 values is %.2f\n", sum / 3);
return 0;
}
当我运行该程序时,出现以下问题: 1) 它似乎适用于正数;
2) 当我尝试输入负数时,程序确实打印了所需的语句,但结果仍然递增到 i,因此减少了进一步输入的数量;另外,即使这个数字是负数,该程序仍然会得出一些平均无意义值。
Please, enter 3 floating values:
-75
Please, enter positive values
98
Sorry, you have entered letters
-786.9
Please, enter positive values
The average of 3 values is 2087205705198174400484999168
3) 当我用字母测试程序时,它仍然返回一些平均值,尽管是零:
Please, enter 3 floating values:
jklj
The average of 3 values is 0.00
非常感谢您的帮助!
最佳答案
您的
元素
永远不会包含字母,因为您已将其声明为浮点型并将其扫描为浮点型。如果你想知道你是否得到了一个字母,你应该读取一个字符串,对其进行测试,然后才将其转换为 float (将element
与'a'
进行比较实际上将它与'a'
= 97 的 ASCII 码进行比较。关于错误的总和 - 您忘记了
else
block 的大括号。将其更改为:else { values[i] = element; sum += values[i]; }
关于c - 计算平均值的程序 : if to test chars,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32285477/