2016-09-10 4 views
-1

リンクリストの中に入るために2つのif文を作成し、平均より上にある数の数と平均以下の数を確認するためにif文を作成しました。私が理解するためにプログラムを実行すると、ifステートメントは1つの数だけカウントされます。また、プログラムが実行されると、if文の1つだけが呼び出され、両方は呼び出されません。多分私は何かを見過ごしているのだろうか?'CalAverage'関数のif文に関する問題

double CalAverage (NewNumber *start){ 

int res; 
double average = 0; 
double total = 0; 
int n = 1; 
int x = 1; 
int y = 1; 

/*if (res != 1){ 
    fprintf(stderr, "Something bad happened in CalAverage()\n"); 
    return add; 
}*/ 
while (start->next){ 
    average += start->newNum; 
    start = start->next; 
    ++n; 
} 
average += start->newNum; 
total = average/n; 
if(total < start->newNum){ 
     ++x; 
     printf("Numbers greater than average: %d\n",x); 
    }else if(total > start->newNum){ 
     ++y; 
     printf("Numbers less than average: %d\n", y); 
    } 
printf("The average is: %lf\n",total); 
return total; 
return x; 
return y; 

} 
+0

返信文が多すぎます。関数から1つの値だけを返すことができます。 'if'文のうちの1つだけがtrue(あるいは、' total == start-> newNum')でなければ、それらのうちの1つの出力しか見ることができません。別のループがありません。最初に平均を計算すると、リストをもう一度トラバースして、平均以上または以下の場合は各数値に対して印刷する必要があります。 – Robert

答えて

1

最初のelseif、呼び出された場合whileループでオーバーライドすることによってリストの先頭へのポインタが失われています。それをループする前にコピーしておいてください。

第2に、if文を別のループ(リストの先頭を再配置した後)に置いて、以下の/平均をカウントします。

double CalAverage (NewNumber *start){ 

    double average = 0; 
    double sum = 0; 
    int n = 0; 
    int x = 0; 
    int y = 0; 

    NewNumber *temp = start; 

    while (temp){ 
     sum += temp->newNum; 
     temp = temp->next; 
     ++n; 
    } 

    average = sum/n; 

    temp = start; 

    while (temp){ 

     if(average < temp->newNum){ 
      ++x; 
     }else if(average > temp->newNum){ 
      ++y; 
     } 

     temp = temp->next; 
    } 

    printf("The average is: %lf\n",average); 
    printf("Numbers greater than average: %d\n",x); 
    printf("Numbers less than average: %d\n", y); 
    return average; 
} 
+0

ありがとう、別のポインタ変数を作成してwhileループの内側に貼り付けると、別の無限ループwhileループが作成されていると思います。 –

0

ザ・ステートメントは、whileループではないので、機能が起動し、whileループが終了した後、一つだけならば、それは場合であるため、ステートメントは、あなたが、

+0

私はそれらをwhileループの中に入れようとしていましたが、whileループにはまだ存在しません。私はそれらを別のwhileループに入れて、無限のwhileループを引き起こしました。助言がありますか? –

+0

私はなぜ2番目のwhileループが無限であるのか分かりません。最初のループと同じです。舞台裏で何か本当に変わったことがなければなりません。 これを回避する方法の1つは、最初のループのインデックスをカウントすることで、2番目のループの長さを知ることができます。 編集:すでに「n」のサイズがあります。ループ。 –