请查看一个程序,提示用户输入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
我很感激你的帮助!
答案 0 :(得分:2)
您的element
将永远不会包含字母,因为您已将其声明为浮动并将其扫描为浮动。如果你想知道你是否收到了一个字母,你应该读一个字符串,测试它,然后才将它转换为float(比较element
到'a'
实际上是将它映射到ASCII码'a'
= 97)。
关于错误的总和 - 你忘记了else
块的大括号。将其更改为:
else {
values[i] = element;
sum += values[i];
}
答案 1 :(得分:0)
如果您希望程序在输入负数时结束,则可以使用return语句或者为更多情况递减i的值。至于字母,它永远不会进入if块,所以你可以使用else。请尝试以下方法:
#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 <= 0)
{
printf ("Please, enter positive values\n");
i--; // or use the return statement
}
else
{
values[i] = element;
sum += values[i];
}
}
else
{
printf("You entered special characters");
return;
}
}
printf ("The average of 3 values is %.2f\n", sum / 3);
return 0;
}