Не получается считать двумерный массив из файла

Рейтинг: 0Ответов: 1Опубликовано: 30.04.2023

есть вот такая функция, она сначала подсчитывает количество элементов в строке, а после количество строк. Мне нужно, чтобы после она считала матрицу вида

1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1

из файла, и я написал цикл для этого, но мне выводит сплошные нули. Почему так?

const int N_MAX = 4;
const int M_MAX = 4;
int S[N_MAX][M_MAX];
int N = 0, M = 1;
int otr, pol;
int x = 0;
void fillArray() {
    setlocale(LC_ALL, "Russian");
    ifstream file("matrix.txt", ios::binary); 
    if (!file.is_open()) {
        cout << "Ошибка открытия файла!" << endl;
        return;
    } 
    string firstLine;
    getline(file, firstLine);
    string elem;
    for (int i = 0; i < firstLine.length(); i++) {
        if (firstLine[i] != ' ') {
            elem += firstLine[i];
        }
        else {
            if (!elem.empty()) {
                N++;
                elem.clear();
            }
        }
    }
    if (!elem.empty()) {
        N++;
    }

    string line;
    while (getline(file, line)) {
        M++;
    }

    if (N <= 0 || N > N_MAX || M <= 0 || M > M_MAX) { 
        cout << "Некорректный размер матрицы!" << endl;
        file.close();
        return;
    }

    if (file.is_open())
    {
        for (int i = 0; i < N; i++)
        {
            for (int j = 0; j < M; j++)
            {
                file >> S[i][j];
            }
        }
    }

    // Вывод матрицы
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < M; j++) {
            cout << S[i][j] << " "; 
        }
        cout << endl; 
    }

   
    const int size = N * M;
    file.close();
}

Ответы

▲ 0

Потому, что вы считали весь файл, и дальнейшие попытки чтения

file >> S[i][j];

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

...
}
file.close();
file.open("matrix.txt", ios::binary);
if (file.is_open())
...