在while循环中平均整数。 C语言

时间:2012-10-03 02:09:32

标签: c

我试图让averageInt正常工作。截至目前如果我输入:10(返回键)20(返回键)30(返回键)40(返回键)50(返回键)L 平均印数:10

答案应该是30.我不明白它将如何返回10。

#include <stdio.h>
#include <math.h>

int main ()
{
//variable declarations
int minInt = 10, maxInt = 0, averageInt=0, numDivBy7 = 0, numGreat15 = 0;
int userInt = 0, sumOfInt = 0, count = 0;

//prompting user for values
printf("Enter integers (enter a character to terminate): ");



//while loop
while (scanf(" %d",&userInt) == 1 )
{
    count++;
    if (userInt<minInt)
        minInt=userInt;
    if (userInt>maxInt)
        maxInt=userInt;
    sumOfInt =+ userInt;
    averageInt = (double)sumOfInt/count;
    if (userInt%7 == 0)
        numDivBy7++;
    if (userInt > 15)
        numGreat15++;
    printf("Enter another integer (enter a character to terminate): ");
}

if (maxInt == 0 && minInt == 10)
    printf("The user entered no integers\n");
else
{
printf("Min: %.2d\tMax: %.2d\tAverage: %.2d",minInt,maxInt,averageInt);
printf("\nDivisable by 7: %.2d\tGreater than 15: %.2d\n",numDivBy7,numGreat15);
}

//terminate
return 0;
}

3 个答案:

答案 0 :(得分:2)

您希望每个循环中都有userInt,因此您必须将scanf放在while循环中。并且userInt != char不是有效的条件测试。

scanf将返回成功匹配和分配的输入项的数量,在您的情况下,当用户输入为数字时,它将返回1,我们可以将其用作while循环的测试

...

userInt = 0;
maxInt = 0;
minInt = (1<<31)-1; //a integer large enough

while( scanf(" %d",&userInt) == 1 )
{
...
}

...

答案 1 :(得分:1)

此时设置代码的方式是将整数读取为数字,而不是一系列字符。根据我对你的问题的理解,这不是你想要的。

您要使用的是scanf(“%c”,&amp; charpointer)。它一次读取一个字符,当流结束时读取空值('\ 0')。

问题的另一部分与确定给定字符是否为数字有关。要记住的重要一点是数字是字符,字符是数字,所以表达式'a'&lt; 'c'完全有效且真实。因此,如果给定字符c是数字数字,那么任何符合布尔表达式的字符(c> ='0'|| c&lt; ='9')将被评估为真。

答案 2 :(得分:1)

尝试首先声明你的 userInt 然后如果检测到程序为整数,程序将继续,就像这样

  

//提示用户输入值

     

char = userInt;

     

printf(“输入整数(输入要终止的字符):”);

     

scanf(“%c”,&amp; userInt);

     

如果(userInt&GT; = 0){

     

继续运行程序

     

} else {end}