繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM