2017-06-27 10 views
-1

私はこの配列を渡してから2を掛けようとしています。私のコードは機能しますが、代わりに4を掛けます。 forループ。誰かがこれを修正する方法を説明することはできますか?2次元配列を関数に渡して2を掛ける

5×5の配列:

int numbers [5][5] = { { 1, 3, 5, 7, 9}, 
         { -2, -4, -6, -8, -10}, 
         { 3, 3, 3, 3, 3}, 
         { 55, 77, 99, 22, 33}, 
         {-15, -250, -350, -450, -550} }; 

// function 
int multiply_bytwo(int n[5][5]) 
{ 
    int total_times = 0; 
    for (int row = 0; row < 5; row++) 
    { 
     for (int col = 0; col < 5; col++) 
     { 
      n[row][col] = n[row][col] * 2; 
     } 

     return total_times; 
    } 
} 
+4

'return total_times;'はあなたのループを早めに退屈させます。 –

+0

あなたの質問を編集し、[最小、完全、かつ確認可能な例](https://stackoverflow.com/help/mcve)を教えてください。 – Akira

+0

***しかしそれは代わりに4で倍数*** ...どのようにそれを知っていますか? –

答えて

0

私はMCVの例にコードを作っ:

#include <stdio.h> 

// function 
int multiply_bytwo(int n[5][5]) 
{ 
    int total_times = 0; 
    for (int row = 0; row < 5; row++) 
    { 
     printf("\n"); 
     for (int col = 0; col < 5; col++) 
     { 
      n[row][col] = n[row][col] * 2; 
      printf("%d\n", n[row][col]); 
     } 
     return total_times; 
    } 
} 

int main(int argc, char *argv[]) 
{ 
    int numbers [5][5] = { { 1,3,5,7,9},{-2,-4,-6, -8, -10},{3,3,3,3,3},{ 55, 77, 99, 22, 33 },{ -15, -250, -350, -450, -550 } }; 
    multiply_bytwo(numbers); 
} 

も、それらが生成されたとき、これは計算値を出力している追加printf()通話を注意してください。

出力:

$ gcc temp.c -std=c99 && ./a.exe 

2 6 10 14 18 

は、我々はここで何を見ていますか?最初の行に2を掛けて({1,3,5,7,9} - >{2,6,10,14,18})、関数が終了しています。

return文をループから外したときの結果はどうなりますか?

コード:

int multiply_bytwo(int n[5][5]) 
{ 
    int total_times = 0; 
    for (int row = 0; row < 5; row++){ 
     printf("\n"); 
     for (int col = 0; col < 5; col++){ 
      n[row][col] = n[row][col] * 2; 
      printf("%d ", n[row][col]); 
     } 
    } 
    return total_times; 
} 

結果:

2 6 10 14 18 
-4 -8 -12 -16 -20 
    6 6 6 6  6 
110 154 198 44 66 
-30 -500 -700 -900 -1100 

私は手動で出力を揃えるの自由を取ったが、あなたが望むよう数字が正確です。

*4がどこから届いたのか分かりません。

また、実際には何も返しません。total_times = 0を最初に設定し、決して変更しないでください。乗算を実行するときに、おそらくそれを増やすことを意味します。

+0

ありがとう!私のフルプログラムはメニューを持っていました(ループを行う)、私はオプションの1つで休憩を忘れていました。それは今働く。 – CowboyCoder

+0

@CowboyCoderそれがあなたを助けたなら、upvoteまで気軽に。それが最も有用な答えであれば、受け入れてください。 – Baldrickk

+0

私の担当者は十分に高くないので、私の投票は表示されません。ありがとうございました。 – CowboyCoder

0

現在お使いのreturn total_timesは、私はあなたが使用して行われることになるループが実行された回数のカウントを取得したいと仮定してい 、リターン0何もしません

ループの戻り側を移動すると、最終的な目的の配列が返されます。

このような問題のために多くの場所にプリントを追加することをお勧めします次のように問題をデバッグしてください。

expected = VALUE 
actual = VALUE 

これは、間違った箇所を見つけるのに役立ちます。

int numbers [5][5] = { { 1 , 3, 5, 7, 9}, 
         { -2, -4, -6, -8, -10}, 
         { 3, 3, 3, 3, 3}, 
         { 55, 77, 99, 22, 33}, 
         {-15,-250,-350,-450,-550} 
         }; 



// function 
int multiply_bytwo(int n[5][5]) 
{ 

    int total_times = 0; 
    for (int row = 0; row < 5; row++) 
    { 


     for (int col = 0; col < 5; col++) 
     { 
      n[row][col] = n[row][col] * 2; 
      total_times ++; 
     } 


    } 
    return total_times; 
} 
0

これを試してみてください:

// function 
int multiply_bytwo(int n[5][5]) 
{ 

    int total_times = 0; 
    for (int row = 0; row < 5; row++) 
    { 
     for (int col = 0; col < 5; col++) 
     { 
      n[row][col] = n[row][col] * 2; 
      total_times++; 
     } 
    } 

    return total_times; 
}