Как отформатировать массив, чтоб массив был не как строка, а как массив?
Как отформатировать массив, чтобы массив был не как строка, а как массив?
using namespace std;
int main()
{
ifstream file("c:\\1\\text.txt");
if (file.is_open())
{
printf("File was opened\n");
}
else
{
printf("File wasn't opened\n");
return -1;
}
int n, m;
file >> m;
file >> n;
int** a = new int* [m] {};
for (int i{}; i < m; i++) {
a[i] = new int[n];
for (int j{}; j < n; j++) {
file >> a[i][j];
printf("a[%d][%d] = %d\t", i, j, a[i][j]);
}
}
}
Ответы (2 шт):
Автор решения: Анонимный Паша
→ Ссылка
Нормальный двух-мерный массив можно реализовать используя только двоичные файлы
#include <fstream>
#include <ios>
#include <iostream>
int main() {
std::ifstream f;
f.open("1.bin", std::ios::binary | std::ios::in);
if(f.is_open()) {
std::cout << "File was opened" << std::endl;
} else {
std::cerr << "File wasn't opened" << std::endl;
return 1;
}
int m, n, i, j;
f.read(reinterpret_cast<char *>(&m), sizeof m);
f.read(reinterpret_cast<char *>(&n), sizeof n);
int **arr = new int*[m];
for(i = 0; i < m; i++) {
arr[i] = new int[n];
for(j = 0; j < n; j++) {
f.read(reinterpret_cast<char *>(&arr[i][j]), sizeof(int));
std::cout << "a[" << i << "][" << j << "] = " << arr[i][j] << "\t" << std::endl;
}
}
for(i = 0; i < m; i++)
delete[] arr[i];
delete[] arr;
f.close();
return 0;
}
У меня вывод такой:
File was opened
a[0][0] = 1
a[0][1] = 2
a[0][2] = 3
a[1][0] = 4
a[1][1] = 5
a[1][2] = 6
a[2][0] = 7
a[2][1] = 8
a[2][2] = 9
При условии что в 1.bin находится:
03 00 00 00 03 00 00 00 01 00 00 00 02 00 00 00
03 00 00 00 04 00 00 00 05 00 00 00 06 00 00 00
07 00 00 00 08 00 00 00 09 00 00 00
Автор решения: DmitryK
→ Ссылка
Просто добавьте после внутреннего цикла перевод строки.
for (int i{}; i < m; i++) {
a[i] = new int[n];
for (int j{}; j < n; j++) {
file >> a[i][j];
printf("a[%d][%d] = %d\t", i, j, a[i][j]);
}
printf("\n"); // <-----------------
}