2016-05-19 8 views
-1

5倍を読み取る関数を作成しようとしています(main関数)、最小値を返します。C++、最小値を見つける、関数エラー:ループは最大で1回実行されます(ループの増分は実行されません)

私は配列の作成とこれらの5つの番号の割り当てを検討していました。その後、配列をループし、その配列の最初の項目と新しい値を比較します。

以下のエラーが表示されます。ループは最大で1回実行されます(ループ増分は実行されません)。

以下のコードを確認してください。それが間違っていたアドバイスは?

double findLowest(double a, double b, double c, double e, double f) 
{ 
    // creating an array numberRange[] to read the 5 input double values 
    double numberRange[] = {a,b,c,e,f}; 

    // creating a variable minimum and assigning it the value of the 
    // first item in the numberRange[] array 
    double minimum = numberRange[0];  

    // looping through the numberRange array 
    for(int counter = 1; counter < sizeof(numberRange) ; counter++) 
     { 
      // checking if the numberRange value at the counter is less than 
      // the minimum value. If true, the minimum value is replaced with 
      // a new value. 
      if (numberRange[counter] < minimum) 
       { 
        minimum = numberRange[counter]; 
       } 

      return minimum; 
     } 

} 
+1

代替の1行: 'findLowest(double a、double b、double c、double e、double f){double numberRange [] = {a、b、c、e、f}; return * std :: min_element(numberRange、numberRange + 5);} ' – PaulMcKenzie

答えて

1

あなたはreturn minimumループの内側を持っているので、その警告の理由があります。したがって、ループの最初の反復中にすぐに関数を終了します。その文は、の後にになるはずです。

また、counterのテストは正しくありません。 sizeof(numberRange)は、配列内のバイト数です。しかし、各数字は1バイト以上です。 doubleが8バイトの場合、sizeof(numberRange)5 * 8 = 40となり、配列の終わりを過ぎて読み取ろうとします。配列の要素数を取得するには、あなたはそれが

counter < sizeof(numberRange)/sizeof(*numberRange) 
+0

ありがとう!これは本当に役に立ちました.. 他の2つの質問があります: 1)sizeof(* numberRange)で '*'の使用は配列の1つの要素を意味しますか? 2)Javaでarray.length()と同じC++が使用されていますか? – asaber

+0

'sizeof(* numberRange)'は配列を最初の要素へのポインタに変換し、それを介して間接的に返し、要素のサイズを返します。 'sizeof(numberRange [0])'と同じです。 – Barmar

+0

いいえ、C++には配列用の配列はありません。なぜなら配列は実行時にそのサイズを記憶していないからです。 'sizeof'はコンパイル時に宣言された型情報を使用するだけで動作します。このため、C++プログラムでは、Cスタイルの配列の代わりに 'std :: vector'のようなコンテナを使用するほうが優れています。 – Barmar

0

はsizeof(numberRange)= 40

をご希望する必要がありますので、各要素の大きさによって配列のサイズを分割する必要があり40回ループする?各ダブルは、あなたのメモリ内で8バイトを取る。 sizeof()は配列の長さではなくスペースを教えてくれます...

+0

これは、ループが1回だけ実行されるという警告が表示される理由を説明していません。 – Barmar

+0

ありがとう!本当に役に立ちました。 – asaber

関連する問題