2017-04-07 39 views
1

まずは、私はちょうどC言語(最初のプログラミング言語)でプログラミングを始めましたが、これは愚かな/単純な質問かもしれませんが、 array/listのindexに値を返す関数を実装します。私はいつも、コンパイラからこのエラーを受け取ります。int型の値を返すにもかかわらず、「エラー:コンパイラは非void関数の終わりに達します。事前のおかげで:C - インデックスの戻り値:制御が非void関数の終わりに達する

int list_get(int list[], int length, int index) { 
    if(index <= CAPACITY){ 
    for(int i = 0; i <= CAPACITY; i++){ 
     if(i == index) 
      return list[i]; 
    } 
    } 
    else{ 
    printf("Index is out of range. \n"); 
    return 0; 
    } 
} 
+3

for-loopの後に 'return 0;'が必要です。 – BLUEPIXY

+0

'if(0 <= index && index BLUEPIXY

+0

' list [i] '前のコメントの入力ミスを' list [index] ' – BLUEPIXY

答えて

3

コンパイラが見て、両方のreturn文は条件ブロックのいくつかの並べ替えの下にあるので、それはあなたに警告しようとします。間違ったことはありません。

i == indexが真である、反復なしのため

    • index <= CAPACITY

      が真である、流れを考えてみましょう。
    • forループが終了しました。その場合

    は、

    はちょうどelseブロックからreturn 0;声明を移動、回避するために....返されることは何もありません。可能性のある副作用に注意してください。i == indexチェックに失敗した場合は、0が返されます。

  • 0

    まずは機能しません。パラメータlengthは関数内では使用されません。また、インデックスがマジック値CAPACITY以下であることを確認するループを含める必要はありません。この条件

    if(i == index) 
    

    がこの条件

    if(index <= CAPACITY){ 
    

    も真であることを提供し、常に真となることを決定することができませんので

    コンパイラはメッセージを発行します。

    また、インデックスの配列の有効な値と0を区別する方法も明確ではありません。

    0

    あなたのforループが終了すると、あなたのelseステートメントはループの外にあります。elseステートメントを実行すると、そこに「return 0」と書かれています。したがって、値は返されません。

    関連する問題