0

我试图让 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;
}
4

3 回答 3

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 )
{
...
}

...
于 2012-10-03T02:27:08.947 回答
1

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

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

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

于 2012-10-03T02:20:52.917 回答
1

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

//提示用户输入值

字符 = 用户整数;

printf("输入整数(输入一个字符结束):");

scanf("%c",&userInt);

如果(userInt>=0){

继续运行程序

}否则{结束}

于 2012-10-03T02:25:07.603 回答