2017-03-10 2 views
-2

私のmain()関数では、age_index()を使用して配列の値を出力しようとしています。関数の配列のインデックスを読み取る

age_index()のパラメータは配列のインデックスです。

私は、そのインデックスに配列値を出力します。ここで

は私の試みです:

#include <stdio.h> 
void age_index(int age); 

int main() { 
    int num;   
    printf("pick a number between 0-5? "); 
    scanf("%d", &num); 

    age_index(num); //read value from array based off which location 
} 

void age_index(int age) {  
    int Index[6]; 
    Index[0] = 23; 
    Index[1] = 33; 
    Index[2] = 18; 
    Index[3] = 121; 
    Index[4] = 30; 
    Index[5] = 66; 

    if (age < 7 && age >= 0) { 
     printf("you are [%d] years old!\n", Index[age]); 
    } else { 
     printf("Sorry, did not choose 0-6"); 
    } 
} 

任意の提案ですか?

+1

あなたの問題は何ですか? –

+1

0〜** 5 **を選択しないでください6 –

答えて

2

あなたの問題は、あなたの配列のインデックスが05間でなければなりませんしながら、あなたは、6まで0から、配列のインデックスを許可している

if (age < 7 && age >= 0) 

に属します。

あなたが問題をこのように

void age_index(size_t age) {  
    int ages[] = {23, 33, 18, 121, 30, 66}; 

    if ((age >= 0) && (age < sizeof(ages)/sizeof(ages[0]))) { 
     printf("you are [%d] years old!\n", ages[age]); 
    } else { 
     printf("Sorry, did not choose 0-%zu\n", sizeof(ages)/sizeof(ages[0])); 
    } 
} 

、この種のを避けるために sizeofを使用する必要があり、年齢は常に、あなたが将来的にそれにサイズを変更しても、あなたの配列の現在のサイズにチェックされています。あなたの配列のサイズが「6」であるとして

int ages[] = {23, 33, 18, 121, 30, 66}; 
+0

あなたは 'sizeof(age)'を意味します、そうですか? ;-) – muXXmit2X

+0

@ muXXmit2X編集しました。 – LPs

+1

ああ!本当にありがとう、私は正しい軌道にいたのを見てうれしいですが、私のプログラムが最終的にうまくいくのを手伝ってくれました! –

0
からあなた if条件を変更して

if (age < 7 && age >= 0) 

へ:

if (age < 6 && age >= 0) 

あなたIndex配列はサイズ6、したがって、そのインデックスは0から開始し、5に端部を有しています。数字x5より大きく入力すると、プログラムは配列境界外にある要素Index[x]にアクセスしようとします。


また、問題はコンパイルされません。最初の行を変更します。

#include <stdio.h> 

、あなたはIndexの要素に値を割り当てるすべての文にセミコロンを追加します。

1

を:あなたは、コードに見ることができるように、あなたは、単に使用して配列を初期化することができます。また

、。あなたの配列インデックスの範囲は0から5でなければなりません。それに応じてif条件を変更する必要があります。

if(age >= 0 && age < 6) 

このようなハードコードされた値を使用する代わりに、

int numOfElements = sizeof(array)/sizeof(array[0]); 

if(age >= 0 && age < numOfElements) 
{ 
    .... 
    .... 
} 

か、このような配列の大きさを示すマクロを定義することができます:あなたは、次のようにsizeof()演算子を使用するように選択することができますいずれか

#include <stdio.h> 
#define MAX_LEN 6 
. 
. 
. 
int main(void) 
{ 
    .... 
    .... 
} 

if(age >= 0 && age < MAX_LEN) 
{ 
    .... 
    .... 
} 
関連する問題