2016-08-31 7 views
-1

CとこのWebサイトで初めて、私はこの問題に慣れています。私は[8] [8]要素を持つ2次元配列を持っています。私は、ユーザーが完了するまで配列に数値を入力させようとしています。プログラムはまだ終わっていませんが、私が進む前にこの問題に取り組んでいます。基本的に私はユーザーが各要素を入力できるようにforループを使用します。ただし、最初の行が完了すると、最後の値が最初の列の2番目の行要素の上書きされます。どのように私はこれを防ぐことができます:ここに私のコードは次のとおりです。2次元配列の値を書き込む

#include <stdio.h> 
#include <string.h> 

int Check_rules(); 

void Print_Array(int array[][8], int size) 
{ 
    int i, j; 
    for (i = 0; i <= size; i++) 
    { 
    printf("\n"); 
    for (j = 0; j <= size; j++) 
    { 
     printf("%d ",array[i][j]); 
    } 
    } 
    printf("\n\n"); 
} 

int main() 
{ 
    int size = 8; 
    int i, j; 


    int fullArray[size][size]; 
    int grid1[3][3]; 
    int grid2[3][3]; 
    int grid3[3][3]; 
    int grid4[3][3]; 
    int grid5[3][3]; 
    int grid6[3][3]; 
    int grid7[3][3]; 
    int grid8[3][3]; 
    int grid9[3][3]; 

    for (i = 0; i <= size; i++) 
    { 
    for (j = 0; j <= size; j++) 
     fullArray[i][j] = 0; 

    } 

    printf("Want to play a game? Enter values 1-9 starting in row 1 column 1, \nand we will work our way from there. Here's the playing board.\nIt's Sudoku, so follow the rules of the game.\n\n"); 

    for (i = 0; i <= size; i++) 
    { 
    printf("\n"); 
    for (j = 0; j <= size; j++) 
     printf("%d ",fullArray[i][j]); 

    } 
    printf("\n\n"); 

    int tmp; 
    char *keeper = (" ");//space for marker 

    for (i = 0; i <= size; i++) 
    { 

    for (j = 0; j <= size; j++) 
    { 
     printf("Enter first value(press 0 and ENTER to skip a box, \nand -1 to cancel game): "); 

     scanf("%d", &tmp); 
     if(tmp == -1) 
     return 0; 

     fullArray[i][j] = tmp; 
     Print_Array(fullArray,size); 
    } 

    } 

    return 0; 
} 

あなたがこれを実行すると、第2行の最初の列要素スポットを上書き1.あなたが行の最後の値を入力するとき、あなたが私の問題を参照してくださいよ?

+2

実際のコードを共有してください。これには少なくとも1つの構文エラーがあります。 – smarx

+0

'i <= size' -->' i <サイズ ' – BLUEPIXY

+0

申し訳ありません、今すぐ更新しました – Nack

答えて

2

どこでも<= sizeがある場合は、実際には< sizeが必要です。これは、Cが0ベースのインデックスを使用するためです。つまり、5つの要素を持つ配列がある場合、インデックスは0,1,2,3,4です。for (int i = 0; i <= 5; i++)のようなループでは、iは値0,1,2,3,4,5を取得します。最後の1つ配列への無効なインデックスです。 i < 5を使用すると問題が解決します(iが5になる前に停止するようにします)。

を修正し、あなたのコードのバージョンをクリーンアップ:明確にするためにEDIT

#include <stdio.h> 
#include <string.h> 

void printArray(int size, int array[][size]) { 
    for (int i = 0; i < size; i++) { 
     printf("\n"); 
     for (int j = 0; j < size; j++) { 
      printf("%d ", array[i][j]); 
     } 
    } 
    printf("\n\n"); 
} 

int main() { 
    int size = 8; 
    int fullArray[size][size]; 

    for (int i = 0; i < size; i++) { 
     for (int j = 0; j < size; j++) { 
      fullArray[i][j] = 0; 
     } 
    } 

    printf("Enter values in row 1 column 1, and we will work our way from there. Here's the playing board. \n\n"); 

    printArray(size, fullArray); 

    for (int i = 0; i < size; i++) { 
     for (int j = 0; j < size; j++) { 
      printf("Enter first value (press 0 and ENTER to skip a box, or -1 to cancel game): "); 

      int number; 
      scanf("%d", &number); 
      if(number == -1) { 
       return 0; 
      } 

      fullArray[i][j] = number; 
      printArray(size, fullArray); 
     } 
    } 

    return 0; 
} 

を、これは、問題の元のコードの修正バージョンです。新しいコードは少し異なりますが、問題は同じだと私は思います。

+0

ああ、わかりました。あなたのコメントをありがとう!私はそれを試してみます – Nack

+0

ありがとう!できます! – Nack

+0

@Nack Excellent!この答えを受け入れてください。 – yano

関連する問題