Я пытаюсь прочитать в float из файла с точно 70x50 чисел в 2D-массив. Когда я читаю в файле и cout данные в массиве, я получаю правильные цифры. Но когда я пытаюсь использовать данные в моем массиве после того, как я прочитал в файле, данные становятся тарабарщиной. Нужно ли мне выделять кучную память для сохранения после чтения файла? Код ниже:
int main() {
fstream file("numbers.txt");
if (!file) {
cerr << "Sample data could not be opened" << endl;
system("PAUSE");
exit(1);
}
float data[70][50];
for (int i = 0; i < 70; i++){
for (int j = 0; j < 50; j++) {
float n;
file>> n;
data[i][j] = n;
cout << data[i][j];
}
}
cout << data[70][50];
system("PAUSE");
face.close();
return(0);
}
Эта строка приведет к неопределенному поведению
cout << data[70][50];
Массив имеет размеры [70][50]
, что означает, что последними действительными индексами являются [69][49]
.
Чтобы прямо ответить на ваш вопрос:
Нужно ли мне выделять кучную память для сохранения после чтения файла?
Нет. data
вашего массива отлично. Если вы должны были зациклиться на нем и cout
все значения от [0][0]
до [69][49]
вы заметили бы, что значения будут правильными.
Чтобы распечатать все содержимое всего массива, вы должны иметь цикл - или два, в данном случае двумерного массива, - и печатать каждый из его элементов.