0

ファイルから多次元配列への入力の読み取りに問題があります。異なる出力を出力する 2 つのネストされた for ループがありますが、同じ出力を出力したいと考えています。私は何時間もそれで立ち往生しており、精神的なブロックにいるだけかもしれません. 入力ファイルは 9x9 の数字セットです。私の問題は [0][8]、[1,8] などで発生します。[1,0]、[2,0] などから値をコピーするだけなので、最初のネストされたループとその出力:

for(j=0;j<9;j++){
    if(j!=0){
        printf("%c",fgetc(file));
    }
    for(k=0;k<9;k++){
        array[j][k]=fgetc(file);
        printf("array[%i][%i] :%c \n",j,k,array[j][k]);
    }
    printf("\n");
}

いくつかの出力:

array[0][0] :8   
array[0][1] :5   
array[0][2] :2     
array[0][3] :7    
array[0][4] :1    
array[0][5] :3    
array[0][6] :9   
array[0][7] :4  
array[0][8] :6  

array[1][0] :4  
array[1][1] :3  
array[1][2] :1  
array[1][3] :9  
array[1][4] :2  
array[1][5] :6  
array[1][6] :5  
array[1][7] :7  
array[1][8] :8  

array[2][0] :9  
array[2][1] :7  
array[2][2] :6  
array[2][3] :5  
array[2][4] :4  
array[2][5] :8  
array[2][6] :2  
array[2][7] :3  
array[2][8] :1  

これは、前のコード セットのすぐ下にある 2 番目のネストされたループです。私がやりたかったのは、書き込んだばかりの多次元配列の内容を読み取ることだけでした。

for(j=0;j<9;j++){
    for(k=0;k<9;k++){   
        printf("array[%i][%i] :%c \n",j,k,array[j][k]);
    }
    printf("\n");
} 

そして、このループの出力は次のとおりです。

array[0][0] :8  
array[0][1] :5  
array[0][2] :2  
array[0][3] :7  
array[0][4] :1  
array[0][5] :3  
array[0][6] :9  
array[0][7] :4  
array[0][8] :4  

array[1][0] :4  
array[1][1] :3  
array[1][2] :1  
array[1][3] :9  
array[1][4] :2  
array[1][5] :6  
array[1][6] :5  
array[1][7] :7  
array[1][8] :9  

array[2][0] :9  
array[2][1] :7  
array[2][2] :6  
array[2][3] :5  
array[2][4] :4  
array[2][5] :8  
array[2][6] :2  
array[2][7] :3  
array[2][8] :7  
4

1 に答える 1

3

問題は、配列が次のように宣言されていることです。

int array[8][8];

ただし、配列は9x9であると想定されています(したがってint array[9][9];)。配列が 8x8 の場合、有効なループ インデックスは 0..8 ではなく 0..7 です。配列の境界を上書きしているため、完全に未定義の動作が発生します。特に、9 行目に到達すると、配列の範囲外に完全に書き込んでおり、他のデータを誰が知っているかを走り書きしています。

示されている上書きは、まさにその状況で予想されるものです。2 番目の行の最初の桁が「最初の行」の最後の桁を上書きするため、入力された 6 ではなく、コードは 4 を認識します。

最初のループ:

array[0][8] :6  

array[1][0] :4

2 番目のループ:

array[0][8] :4  

array[1][0] :4
于 2012-12-10T21:01:05.397 に答える