2013-04-07 4 views
0

У меня есть небольшая проблема, я пишу программу, чтобы попросить пользователя ввести числа для сетки Судоку, а затем сохранить их в массиве 2-го уровня. Я знаю, как распечатать массив, чтобы показать сетку Sudoku. Но мне не удается получить элементы массива на номера, которые вводит пользователь, может ли кто-нибудь помочь?Заполнение 2-D массивов с пользовательского ввода

Это все, что у меня есть, что я знаю, это не так много, но я только когда-либо делал это с 1-м массивом раньше.

Код:

#include <iostream> 

using namespace std; 

void fillGrid1(int grid1, int sizeOfArray) { 
    for(int x = 0; x < sizeOfArray; x++) { 
     grid1[x][9] = x; 
    } 
} 

int main() 
{ 
    int grid1[9][9]; 
    fillGrid1(grid1, 9); 

    for(int row = 0; row < 9; row++) { 
     for(int column = 0; column < 9; column++) { 
      cout << grid1[row][column] << " "; 
     } 

     cout << endl; 
    } 
} 
+0

Что означает 'fillGrid1'? –

+0

Что вы сделали с 1d массивами, которые вы не можете сделать с 2d? –

+0

Это часть, с которой у меня возникают проблемы, Чтобы заполнить массив. – Thomas

ответ

1

Здесь у вас есть две функции, одна интерактивно заполнить отверстие судоку, получая ввод данных пользователем. Другой для печати судоку. С небольшим количеством информации, которую вы дали это то, что я думаю, что вы ищете:

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

using namespace std; 

void interactiveSudokuFill(int grid1[9][9]){ 

for(int y=0;y<9;y++){ 
    for(int x=0;x<9;x++){ 
     string theString; 
     cout<<"Write the value to prace in Sudoku["<<y<<"]["<<x<<"] :"<<endl; 
     std::getline(cin,theString); 
     int nr=atoi(theString.c_str()); 
     grid1[y][x]=nr; 
    } 

} 
} 

void printSudoku(int grid[9][9]){ 
for(int y=0;y<9;y++){ 
     for(int x=0;x<9;x++){ 
      cout<<"["<<grid[y][x]<<"]"; 
     } 
     cout<<endl; 

    } 
} 
int main() 
{ 
int grid1[9][9]; 
interactiveSudokuFill(grid1); 

printSudoku(grid1); 
} 

Есть другие более безопасные/элегантные способы сделать это (для ввода примеров пользователя должно быть проверено перед delievering его atoi()), но таким образом, это проще, о чем я могу думать.

+0

Спасибо, это было полезно, я добавлю в подтверждение ввода и т. Д. Самостоятельно – Thomas

0

Во-первых, вы принимаете в междунар где вы ожидаете массив:

void fillGrid1(int grid1, int sizeOfArray) 
//    ^^^^^^^^^ 

Это должно быть что-то в форме,

void fillGrid1(int grid1[9][9], int sizeOfArray) 

Далее в том, что вы должны использовать вложенный цикл для доступа к элементам многомерного массива:

void fillGrid1(int grid1[9][9], int sizeOfArray) 
{ 
    for (int i = 0; i < sizeOfArray; ++i) 
    { 
     for (int k = 0; k < sizeOfArray; ++k) 
     { 
      grid1[i][k] = x; // shouldn't x be the number the user entered? 
     } 
    } 
} 

Вы должны также нулевой заполнить ваш массив:

int grid1[9][9] = {0}; 
Смежные вопросы