C编程nan输出

时间:2013-09-28 22:05:34

标签: c output nan

我非常喜欢用C语言编程,所以请在这里帮忙。我正在尝试编写一个循环要求用户输入数字的程序,如果数字为正,则将其添加到总数中,如果为负数,则结束程序并显示平均,最低输入和最高输入。不幸的是,无论我用低和高的东西改变什么,我一直得到'低'的低点,无论高的负数...请帮忙!

#include<stdio.h>
int main(void)
{
    float input;
    float total;
    float low;
    float high;
    float average;
    int count=0;

    printf("\n\nPlease enter a positive number to continue or a negative number");
    printf(" to stop: ");

    scanf("%f", &input);

    while (input > 0)
    {
        count = count + 1;
        printf("\nPlease enter a positive number to continue or a negative");
        printf(" number to stop: ");
        scanf("%f", &input);
        total = total + input;  

        if ( low < input )
        {
            ( low = input );
        }
        else
        {
            ( low = low );  
        }
    }
    if (input < high)
    {
        (high = input);
    }
    else
    {
        (high = high);
    }

    average = total / count;
    printf("\n\n\nCount=%d",count);
    printf("\n\n\nTotal=%f",total);
    printf("\nThe average of all values entered is %f\n", average);
    printf("\nThe low value entered: %f\n", low);
    printf("\nThe highest value entered: %f\n", high);
    return 0;
}

用gcc编译并用数字1,5,4测试后,然后-1我得到以下输出

Count=3


Total=8.000000
The average of all values entered is 2.666667

The low value entered: nan 

The highest value entered: -1.000000

2 个答案:

答案 0 :(得分:0)

你已成为垃圾价值的牺牲品 - 这对初学者来说是一个常见的错误。具体来说,它发生在这些行 -

float total;
float low;
float high;
float average;

编写时,系统会为变量分配一个内存位置。虽然计算机不是无限的,但它只是使用过去被其他东西使用的内存位置,但不再使用它。但大多数情况下,“其他东西”并不会自行清理(因为它需要花费很多时间),因此那里的信息就会留在那里,例如fdaba7e23f。这对我们来说完全没有意义,所以我们称之为垃圾值。

您可以通过初始化变量来解决此问题,如此 -

float total=0;
float low;
float high;
float average=0;

请注意,您必须为低变量添加一些额外的逻辑。这是一种方法 -

printf("\n\nPlease enter a positive number to continue or a negative number");
printf(" to stop: ");

scanf("%f", &input);
low=input;
high=input;

while (input > 0)
....
....

正如您所看到的,我刚刚复制了您的代码并在第一个scanf之后添加了两行。

答案 1 :(得分:0)

首先,我不知道你是否注意到它,你的数量和总数都搞砸了。

除了@Drgin

给出的初始化答案外,请更改执行顺序
int total = input;
while (input > 0)
{
 printf("\nPlease enter a positive number to continue or a negative");
 printf(" number to stop: ");
 scanf("%f", &input);
 count = count + 1;
 total = total + input;