2017-07-10 2 views
-2

私はクラスで作業しているこの簡単なプログラムを持っています。次に、プログラムは、forループを使用して各値を表示する関数を呼び出し、forループを使用してすべての値を二重にする関数を呼び出して、前の表示関数を呼び出して配列を再度表示します。C - forループを使用して2d Arrayの値を入力すると、入力された値と異なる値が生成される

これはすべて機能しているようですが、2dArrayの値を初期化するときに、一定の領域に対して常に奇妙な出力が得られています。例えば

1,1,2, 
1,2,3, 
1,2,3, 
1,2,5, 
1,2,3 

更に、倍加機能だけでさらに奇妙な結果を生成する:「1、2、3」の5行を入力した後、表示機能を呼び出すと、これは出力として生成しますユーザが入力したものとは異なる出力が得られた領域。私はディスプレイを掲載アレイ上の二重の機能の 出力として:プログラム全体で唯一の真の数学的な操作は、それが配列」の値を設定するforループを通る倍増機能である

2,4,8 
2,4,6 
2,4,6 
2,4,10, 
4,8,6 

私の人生のために、私が書いたプログラムのどの部分がどうなるのか理解できません。[j] [i] =(array [j] [i] = array [j] [i] * 2)ユーザの入力を表示されたものに変更させる。 "1,2,3"以外の値を入力すると同様に奇妙な結果が得られます。誰でも何が間違っているのか分かりませんか?私はそれが欠けている非常に単純な間違いでなければならないように感じる。ここに私のソースコードは次のとおりです。

#include <stdio.h> 
#include <stdlib.h> 

void displayArray(int array[][4]); 
void doubleArray(int array[][4]); 


int main() { 

    int dArray[2][4]; 
    int i, j, k; 

    for(i = 0; i <= 4; i++){ 
     for(j = 0; j <= 2; j++){ 
      printf("Enter a value for the array at position %d,%d.\n", j, i); 
      scanf("%d", &dArray[j][i]); 
     } 
    } 
    printf("Displaying your original array...\n"); 
    displayArray(dArray); 
    printf("Doubling your array...\n"); 
    doubleArray(dArray); 
    printf("Displaying your doubled array....\n"); 
    displayArray(dArray); 
    system("pause"); 

} 

void displayArray(int array[][4]){ 
    int i, j; 

    for(i = 0; i <= 4; i++){ 
     printf("\n"); 
     for(j = 0; j <= 2; j++){ 
      if(j == 2 && i == 4){ 
       printf("%d", array[j][i]); 
      } 
      else{ 
       printf("%d,", array[j][i]); 
      } 
      //system("pause"); 
     } 
    } 
    printf("\n"); 
} 

void doubleArray(int array [][4]){ 
    int i, j; 

    for(i = 0; i <= 4; i++){ 
     for(j = 0; j <= 2; j++){ 
      array[j][i] = (array[j][i] * 2); 
      //printf("%d\n", array[j][i]); 
     } 
    } 
} 

これは、1つの.cファイル内のすべてだし、それはすべての違いを、私は++ DEVCを使用しています。

+1

あなたの配列の範囲外に出て、*未定義の動作*につながります。 4つの要素を持つ配列を宣言すると、有効なインデックスは何ですか? –

+0

それは何ですか?私はそれについて疑問に思っていた。それは最初の位置である[0] [0]で始まるだろうか?私はそれらをdArray [3] [5]のように宣言すべきですか?今それを試してみる。 – user7608513

+0

あなたの質問に答えるには、有効なインデックスが[0]〜[3] – user7608513

答えて

0

2D C配列の寸法を計算するには、列の数と行の数を数えなければなりません。あなたの例では、3列と5行で、配列定義に入力する必要がある値は以下のとおりです。 int配列[3] [5]

次に、Cは0オフセットでインデックスを作成するため、列0〜2(つまり3列)と行0〜4(つまり5行)を使用して配列の要素を参照します。他の人が言ったように、これは "限界より低い"かわりに "限界より低い"(列の場合は< 3、行の場合は< 5)を使用して達成することができます(間違った、範囲外:< =列の場合は3、行の場合は< = 5)。

+0

そうだった。それは簡単な間違いだった。私は答えを感謝します! – user7608513

関連する問題