Что не так с этим кодом массива символов? - PullRequest
1 голос
/ 01 января 2012

Я новичок в C ++, программирую всего несколько дней, так что это может показаться глупым, но вы можете определить, почему мои массивы работают неправильно? Это начало программы, которую я разрабатываю, которая решит головоломки Судоку, но двумерный массив, который я использую для ее решения, работает неправильно.

#include <iostream>
#include <string>
using namespace std;

int main () {
    char dash[9][9];
    for (int array=0; array<9; array++) {
        for (int array2=0; array2<9; array2++) {
            dash[array][array2]=array2;
            cout << dash[array][array2];
        }
    }
    cout << dash[1][4] << endl; //This is temporary, but for some reason nothing outputs when I do this command.
    cout << "╔═══════════╦═══════════╦═══════════╗" << endl;
    for (int count=0; count<3; count++) {
        for (int count2=0; count2<3; count2++) {
            cout << "║_" << dash[count][count2*3] << "_|_" << dash[count]    [count2*3+1] << "_|_" << dash[count][count2*3+2] << "_";   
        }
            cout << "║" << endl;
    }
    cout << "╠═══════════╬═══════════╬═══════════╣" << endl;
    for (int count=0; count<3; count++) {
        for (int count2=0; count2<3; count2++) {
            cout << "║_" << dash[count][count2*3] << "_|_" << dash[count]    [count2*3+1] << "_|_" << dash[count][count2*3+2] << "_";   
        }
        cout << "║" << endl;
    }
cout << "╠═══════════╬═══════════╬═══════════╣" << endl;
for (int count=0; count<3; count++) {
    for (int count2=0; count2<3; count2++) {
        cout << "║_" << dash[count][count2*3] << "_|_" << dash[count][count2*3+1] << "_|_" << dash[count][count2*3+2] << "_";   
    }
    cout << "║" << endl;
}
cout << "╚═══════════╩═══════════╩═══════════╝" << endl;
return 0;

}

Также я знаю, что могут быть более простые способы создания доски Судоку, но я уже вижу в уме, как она будет работать, и если она не удалась, то единственный способ научиться - это потерпеть неудачу. Все, что я хочу знать, это то, что не так с массивами.

Ответы [ 3 ]

5 голосов
/ 01 января 2012

В вашем массиве char хранятся числовые данные, и это нормально, но cout пытается распечатать их как символ.Попробуйте привести к целому числу во время вывода:

cout << (int)dash[count][count2*3]

Другой вариант - сохранить символы в массиве:

for (int array=0; array<9; array++) {
    for (int array2=0; array2<9; array2++) {
        dash[array][array2] = '0' + array2;
    }
}
3 голосов
/ 01 января 2012

Вы пытаетесь отобразить символы, как если бы они были целыми числами. Ну, технически они есть, но они не отображаются как целые числа. Либо измените массив char на массив int (очень просто), либо каждый раз, когда вы отображаете данные, приводите его к типу int (утомительно).

0 голосов
/ 01 января 2012

Измените char dash[9][9] на int dash[9][9].Вы присваиваете dash[i][j] маленькие цифры, так как char s - это в основном непечатные управляющие символы, поэтому ничего понятного не печатается.Как int s они печатаются так, как вы ожидаете.

...