2016-10-31 10 views
-1

配列内のすべての数字( 'main'で提供)、特定のインデックス内(たとえば0〜11、または2〜6など)の番号を出力する関数を作成する必要がありました。その後、関数は最後のインデックス値の値を返す必要があります。例えば戻り値に何か問題がありますか?

、I入力数字27場合アレイ

{8, 3, 6, 7, 9, 5, 3, 8, 6, 7, 4, 5} 

を与え、それは{6 7 9 5 3 8}をprintfの、その後8. However it keeps returning 6`を返すべきです。

int index(int data[], int low, int high) 
{  
    while(low <= high) { 
     printf("%d\n", data[low]); 
     low++; 
    } 

    return data[low];  
} 

/* I know I could just put return[high], but i though it 
    wouldn't matter since 'low' keeps incrementing until low == high */ 

int main() 
{  
    int activities[12] = {8, 3, 6, 7, 9, 5, 3, 8, 6, 7, 4, 5}; 
    int low, high; 
    int x; 

    printf("What is the starting day? "); 
    scanf("%d", &low); 
    printf("What is the ending day? "); 
    scanf("%d", &high); 

    x = index(activities, low, high); 
    printf("\n\nThe function returns this value: %d",x); 

    return 0; 
} 
+1

少し考えてみましょう。あなたは 'low == high'までループし、ループで' data [low] 'と' low ++ 'を続けて出力します。ループが終了したときの 'low'の値は?デバッガの使い方を知っていれば、1分ごとにコードを1行ずつ進んで、質問を書くのに要した時間を短縮できます。 :) –

+0

あなたの絶対に正しい。私はそれに気づいたはずです。私は今、恥ずかしいと感じますが、私は助けに感謝します。 –

答えて

2

あなたがdata[low]を返却すると、低いがすでに低いの最後の値がhigh + 1だろう1だけインクリメントされます。 while条件は失敗し、ループから出てきます。

だから、あなたのコードは次のようになります。

return data[high]; 
0

あなたは単に

return data[--low]; 

を行うことができますlow変数を使用して最後の値を返すようにしたい場合は条件を確認しながら、ときに失敗したのでlowの値は、highの値よりも大きい。

例えば、あなたは、図7に示すように、低最後の反復で8なり、現在活動[8] ==ので活動アレイ6に価値を指すループを壊す= 2 =低及び高入力した場合6

だから私は、[高]単に、

return data[high]; 
0

だけ 戻りデータである最後のインデックスを使用して値を返すことを示唆しています。 ハイの後にローに1をインクリメントすると、その値が返されます。

+0

これは正しいですが、 'high'が' low'より小さい(奇妙で誤っていると思われる)状況を除きます。しかし、それはおそらく未定義の動作です。 – Addison

関連する問題