2017-11-21 16 views
0

これはノブの質問ですので、私と一緒に裸です。 私はscanf-sの行と列を主な関数に取ります。 しかし、この機能では動作しませんが、forループで使用されることはありません。 問題は何ですか?私のscanfはなぜ機能しませんか?

void function (int rows, int cols, int array[S][S]) 
{ 
int i, j; 
scanf ("%d", &rows); 
scanf ("%d", &cols); 

    for (i = 0; i < rows; i++) 
    { 
     for (j = 0; j < cols; j++) 
     { 
      while (array[i][j]<1 || array[i][j]>S) 
      scanf ("%d", &array[i][j]); 

     } 
    } 
} 
+4

エラーを示して短く、**完全**プログラムを提供してください。詳細は、[mcve]を参照してください。 –

+0

この関数から行の列の読みを分離し、関数を次のように変更します。 'void function(int rows、int cols、int array [rows] [cols]) ' – Lundin

答えて

1

パラメータrowscolsの変更が呼び出し側関数で表示されないと不平を言っていると思います。

これは、Cが値渡しの言語であるためです。

の変化は次のようになります。

int main(void) 
{ 
    int rows; 
    int cols 
    int array[5][5]; 

    caller(&rows, &cols, array); // Pass by pointer, not value. 

    /* Now, rows and cols have been properly set */ 

    return 0; 
} 

/* Parameters are received as references, not values */  
void function (int *p_rows, int* p_cols, int array[5][5]) 
{ 
int i, j; 
scanf ("%d", p_rows); 
scanf ("%d", p_cols); 

    for (i = 0; i < *p_rows; i++) 
    { 
     for (j = 0; j < *p_cols; j++) 
     { 
      while (array[i][j]<1 || array[i][j]>5) 
       scanf ("%d", &array[i][j]); 
     } 
    } 
} 
+0

こんにちは。これは完璧に機能してくれて なぜそれが正確に機能するのかeli5すれば素敵な時間があれば。 なぜ配列へのscanf-ingが通常の方法で動作するのですか?あなたが提供するメソッドを使用して行を取得する必要があるのはなぜですか? もう一度ありがとう – franklin

0

whileループの状態は、最初から間違っている可能性があります。 array[i][j]

関連する問題