[英]averaging integers in while loop. C language
我试图使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;
}
您需要在每个循环中使用userInt
,因此必须将scanf
放入while
循环中。 而且userInt != char
不是有效的条件测试。
scanf
将返回成功匹配和分配的输入项的数量,在您的情况下,当用户输入为digit时,它将返回1,我们可以将其用作while
循环的测试。
...
userInt = 0;
maxInt = 0;
minInt = (1<<31)-1; //a integer large enough
while( scanf(" %d",&userInt) == 1 )
{
...
}
...
此时,您设置代码的方式将读取整数作为数字,而不是一系列字符。 从我对您的问题的了解中,这不是您想要的。
您要使用的是scanf(“%c”,&charpointer)。 这一次读取一个字符,流结束时读取一个空值('\\ 0')。
问题的另一部分与确定给定字符是否为数字有关。 要记住的重要一点是数字是字符,而字符是数字,因此表达式“ a” <“ c”是完全有效和正确的。 因此,如果给定字符c是数字,则适合布尔表达式(c> ='0'|| c <='9')的任何字符都将得出true。
尝试先声明您的userInt,然后如果检测到程序为整数,则程序将继续,如下所示
//提示用户输入值
char = userInt;
printf(“输入整数(输入一个字符以终止):”);
scanf(“%c”,&userInt);
如果(userInt> = 0){
继续运行程序
}其他{结束}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.