2012-10-03 48 views
0

我想让averageInt正常工作。截至目前如果我输入:10(返回键)20(返回键)30(返回键)40(返回键)50(返回键)L 平均打印:10在while循环中对整数求平均值。 C语言

答案应该是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; 
} 
+0

尽管听起来没什么用,但回答“如何检查用户是否输入了非数字?”将*直接*与“如何检查用户是否输入了数字?”相关也许看看一个ctype.h:isdigit()作为起点。 – WhozCraig

回答

2

你想在每一个循环的userInt,所以你必须把scanfwhile循环。而userInt != char不是有效的条件测试。

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

... 

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

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

... 
+0

我想它的方式里面,但要被用来userInt W/O被初始化。 – CorySTG

+0

@CorySTG,你需要用其他值初始化maxInt,minInt。看我的代码。 – Marcus

+0

它是否仍然从顶部初始化,“int userInt,sumOfInt = 0,count = 0;”? – CorySTG

1

你在这个时候设置了代码的方式是将整数作为数字读取,而不是一系列字符。从我所能理解的你的问题来看,这不是你想要的。

要使用什么是scanf函数( “%C”,& charpointer)。它一次读取一个字符,当流结束时读取一个空('\ 0')。

你的问题的另一部分具有确定是否一个给定的字符是数字做。要记住的重要一点是数字是字符,字符是数字,所以表达式'a'<'c'完全有效并且是真实的。所以,适合的布尔表达式的任何字符,如果一个给定的字符,C,是一个数字位(C> =“0” ||ç< =“9”)将评估为真。

1

尝试先申报您的userInt那么如果检测程序是一个整数,该计划将继续,类似的值

这个

//提示用户

字符= userInt;

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

的scanf( “%C”,& userInt);

如果(userInt> = 0){

继续运行程序

}其他{结束}

+0

无视。现在测试。 – CorySTG

+0

我试过“while(userInt> = 0)”。它返回的错误是,正在使用averageInt而未被初始化。我知道这不是因为我改变了,而是应该在while参数中工作? – CorySTG

+0

尽量把你的参数while循环 –