Не могу прочитать массив символов - PullRequest
0 голосов
/ 27 марта 2020

Основная проблема c заключается в том, что перед нами (в парах) была поставлена ​​задача создать программу, в том числе - для чтения в текстовом файле и отображения ее в виде доски судоку в рамках нашего введения в кодирование в Uni. ,

Мы завершили большую часть кода и получили его достаточно хорошо. Тем не менее, мы боремся с тем, что я бы назвал основным аспектом этого. Код читает в файле и сохраняет его в классах private char 9 * 9 matrix. Мы запустили отладочную распечатку, чтобы проверить, что значения сохраняются в матрице, и это действительно так. Проблема связана с функцией getMatrixVal(int x, int y), которая, по нашему мнению, возвращает указатель, а не символ. Мы попытались вернуть указатель из функции и попытались сохранить его в указателе, а затем в переменной char. К сожалению, мы не очень хороши с указателями.

Из-за недавних отстранений от расписания университетов мы временно не можем получить совет и поддержку, в которых мы нуждаемся, и, следовательно, мы обращаемся сюда за советом. Кроме того, мы используем программу для программирования qt на Raspberry Pi - это может иметь какое-то отношение к нашим проблемам?

#include "grid.h"

#include <QDebug>
#include <QChar>
#include <QFile>

grid::grid(char matrix_value, const int x, const int y) {
    matrix[x][y] = matrix_value;

    //char c = matrix[x][y];
    //qDebug() << QChar(c);
}

void grid::load_file() {
    QFile file("/home/pi/Documents/ELEC1204/P6/SUDOKU.txt");
    char character, c;
    int i, j;
    if(!file.open(QFile::ReadOnly)) {
        qDebug() << "Error in opening file";
        return;
    } //Print error if message if unable to open file

    for(i = 0; i < 9; i++) {
        for(j = 0; j < 9; j++) {
            SKIP: //Related to 'goto'
            file.read(&character, sizeof(char)); //Read ini individual         characters

            if(character == '\xd' || character == '\xa')
                goto SKIP;
                //Skip character related to new lines
                //Goes to 'SKIP' point in program
            else if(character == 'X')
                grid('_', i, j);
                //Save 'X's as '_'
            else
                grid(character, i, j);
                //Save numbers as they are

            c = getMatrixVal(i, j);
            qDebug() << "i = " << i << "| j = " << j << "| Character is: " << QChar(character) << "| Matrix character is: " << QChar(c);
            //Print-out for debugging
        }
    }
    file.close();
    //Close file
}
// Possibly useful source:
// https://doc.qt.io/qt-5/qfile.html
// https://forum.qt.io/topic/60240/reading-file-byte-by-byte/5

char grid::getMatrixVal(const int x, const int y) {
    char c = matrix[x][y];

    //qDebug() << "Matrix[" << x << "][" << y << "] is: " << QChar(c);

    return c;
}

void grid::printMatrix() {
    for(int i = 0; i < 9; i++) {
        for(int j = 0; j < 9; j++) {
            qDebug() << matrix[i][j];
        }
    }
}
//Prints out matrix
//Debugging function

1 Ответ

3 голосов
/ 27 марта 2020

В getMatrixVal нет ничего плохого: он возвращает персонажа из нужного места в matrix. Ваш вызов grid(character, i, j) создает новый экземпляр сетки , который не связан с текущим.

Вместо этого просто назначьте непосредственно matrix: (или используйте функцию установки)

matrix[i][j] = character;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...