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