C中输入数字的平均值总和为0

时间:2014-01-02 23:29:38

标签: c

这是一个代码,用于评估10个输入数字的平均值。问题是它在退出循环后似乎没有正确打印总和(它总是等于0),其他一切都正常工作。

int count=0, n=10, c;
float sum=0, x;
do{
    printf("x=");
    scanf("%f", &x);
    count++;
    sum+=x;
}
while(count<n);
printf("Sum is %d", sum);
printf("\nCount is: %d", count);
printf("\nThe Average of the numbers is : %0.2f", sum/count);
getch();
}

另一个问题是如何在达到符号后退出循环(即没有设置要输入的整数数量的限制)。

4 个答案:

答案 0 :(得分:4)

对浮点数使用%f格式说明符。

printf("Sum is %f", sum);

要退出符号上的循环,您可以检查scanf的返回值。 scanf返回读取的项目数。如果它返回0,则用户没有输入有效数字。

while (1) {
    printf("x=");

    if (scanf("%f", &x) != 1) {
        break;
    }

    ...
}

break退出当前循环。

答案 1 :(得分:2)

要回答你的第一个问题,应该是printf(&#34;%f&#34;,sum)来打印正确的总和。因为你使用float你必须使用%f,如果你使用int它是%d。对于你的第二个问题,你可以做这样的事情(相应地修改它):

int main(){ 
// Declare Variables 
int count = 0; float sum = 0, currentNum = 0;

// Ask user for input 
while(currentNum > -1)
{ 
   printf("Enter integer to be averaged (enter -1 to get avg):"); 
   scanf("%f",&currentNum); 
   if(currentNum == -1)
       break; 

   // Check the entered number and computed sum
   printf("You entered: %0.2f\n", currentNum); 
   sum += currentNum; 
   printf("Current sum: %0.2f\n", sum);
   count++; 
}

// Print Average
printf("Average is: %0.2f\n", sum/count); 

return 0; 
}

答案 2 :(得分:0)

要回答你的第二个问题,你可以这样做:

scanf("%f", &x);
if (x==0) {
  break;
}

如果输入0,这将使你脱离循环,那么你的循环可以是无限的:

do {

} while(true)

答案 3 :(得分:0)

对于第二个问题,我认为EOF可能是更好的解决方案:

while(scanf("%f", &x) != EOF)