0

私は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
4

2 に答える 2

0

ガベージ値の犠牲になりました - 初心者によくある間違いです。具体的には、これらの行で発生しています-

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

それを書くと、システムは変数にメモリ位置を割り当てます。ただし、コンピューターは無限ではないため、以前は他の何かによって使用されていたが、現在は使用されていないメモリ位置を使用しているだけです。ただし、ほとんどの場合、「何か他のもの」はそれ自体がクリーンアップされないため (時間がかかるため)、そこにあった情報 ( fdaba7e23f. これは私たちにはまったく意味がないので、ガベージ値と呼びます。

次のように、変数を初期化することでこれを修正できます-

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

low 変数にロジックを追加する必要があることに注意してください。ここにそれを行う1つの方法があります-

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)
....
....

ご覧のとおり、コードをコピーして、最初の の後に 2 行を追加しましたscanf

于 2013-09-28T22:10:46.733 に答える
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;
于 2013-09-28T22:13:03.960 に答える