C/C++
Запись и чтение двумерного массива в бинарный файл
Добрый вечер, у меня проблема с записью и чтением двумерного массива, мне нужно сделать сохранения для игры морской бой, то есть сохранить два двумерных массива, абсолютно не понимаю как это сделать, буду очень благодарен за помощь.
Для символьной статической матрицы размера n
#include <fstream>
#include <iostream>
using namespace std;
int main() {
const auto n = 3U;
char a[n][n] = {
{ '.', 'O', 'O' },
{ 'X', 'X', '.' },
{ '.', '.', '.' }
};
char b[n][n] = {
{ 'X', '.', '.' },
{ '.', 'X', 'O' },
{ '.', '.', 'O' }
};
for (auto i = 0U; i < n; ++i) {
for (auto j = 0U; j < n; ++j) cout << a[i][j];
puts("");
}
puts("");
for (auto i = 0U; i < n; ++i) {
for (auto j = 0U; j < n; ++j) cout << b[i][j];
puts("");
}
puts("\n");
ofstream save("sea_battle.bin", ios::binary);
if (save.is_open()) {
save.write((char*)&n, sizeof(n));
for (auto i = 0U; i < n; ++i) {
for (auto j = 0U; j < n; ++j) {
save.write(&a[i][j], sizeof(char));
}
}
for (auto i = 0U; i < n; ++i) {
for (auto j = 0U; j < n; ++j) {
save.write(&b[i][j], sizeof(char));
}
}
save.close();
}
char ax[n][n] = { 0 };
char bx[n][n] = { 0 };
ifstream load("sea_battle.bin", ios::binary);
if (load.is_open()) {
load.read((char*)&n, sizeof(n));
for (auto i = 0U; i < n; ++i) {
for (auto j = 0U; j < n; ++j) {
load.read(&ax[i][j], sizeof(char));
}
}
for (auto i = 0U; i < n; ++i) {
for (auto j = 0U; j < n; ++j) {
load.read(&bx[i][j], sizeof(char));
}
}
load.close();
}
for (auto i = 0U; i < n; ++i) {
for (auto j = 0U; j < n; ++j) cout << ax[i][j];
puts("");
}
puts("");
for (auto i = 0U; i < n; ++i) {
for (auto j = 0U; j < n; ++j) cout << bx[i][j];
puts("");
}
system("pause > nul");
}
#include <fstream>
#include <iostream>
using namespace std;
int main() {
const auto n = 3U;
char a[n][n] = {
{ '.', 'O', 'O' },
{ 'X', 'X', '.' },
{ '.', '.', '.' }
};
char b[n][n] = {
{ 'X', '.', '.' },
{ '.', 'X', 'O' },
{ '.', '.', 'O' }
};
for (auto i = 0U; i < n; ++i) {
for (auto j = 0U; j < n; ++j) cout << a[i][j];
puts("");
}
puts("");
for (auto i = 0U; i < n; ++i) {
for (auto j = 0U; j < n; ++j) cout << b[i][j];
puts("");
}
puts("\n");
ofstream save("sea_battle.bin", ios::binary);
if (save.is_open()) {
save.write((char*)&n, sizeof(n));
for (auto i = 0U; i < n; ++i) {
for (auto j = 0U; j < n; ++j) {
save.write(&a[i][j], sizeof(char));
}
}
for (auto i = 0U; i < n; ++i) {
for (auto j = 0U; j < n; ++j) {
save.write(&b[i][j], sizeof(char));
}
}
save.close();
}
char ax[n][n] = { 0 };
char bx[n][n] = { 0 };
ifstream load("sea_battle.bin", ios::binary);
if (load.is_open()) {
load.read((char*)&n, sizeof(n));
for (auto i = 0U; i < n; ++i) {
for (auto j = 0U; j < n; ++j) {
load.read(&ax[i][j], sizeof(char));
}
}
for (auto i = 0U; i < n; ++i) {
for (auto j = 0U; j < n; ++j) {
load.read(&bx[i][j], sizeof(char));
}
}
load.close();
}
for (auto i = 0U; i < n; ++i) {
for (auto j = 0U; j < n; ++j) cout << ax[i][j];
puts("");
}
puts("");
for (auto i = 0U; i < n; ++i) {
for (auto j = 0U; j < n; ++j) cout << bx[i][j];
puts("");
}
system("pause > nul");
}
Александр Луковкин
а что такое 0U в коде, я видимо ещё не дошёл до этого
Пишем в файл размеры массивов, потом - сами массивы, построчно. Читаем в том же порядке.
Александр Луковкин
Я не понимаю через что их делать, ofstream,или что-то другое?
если ты ничего в этом не понимаешь - ТАК И НЕ СУЙСЯ ТУДА!
Александр Луковкин
Чел, пожалуйста не высирай, я далеко не middle и не senior,я делаю консольные приложения
Александр Луковкин
ну начнём с того, что мне добрые люди уже помогли, спасибо им за то что делятся своими знаниями с другими, а тебя прошу не высирать больше
СЕРИАЛИЗАЦИЯ или PICKLE
Александр Луковкин
я ещё не доходил до классов, мне нужно это сделать через ofstream,или что-то похожее на это
Похожие вопросы
- Двумерные массивы C++, ничего не понимаю((( Нужна помощь
- Двумерный массив C++
- Задача.Программирование.С++.Динамический двумерный массив.
- Ввести двумерный массив A(n x m)
- Создать и вывести двумерный массив через функции
- Указатель превращается в двумерный массив. (Си)
- Нужно найти в бинарном файле введенные пользователем данные.
- Заполнить двумерный массив 5*3 и найти строку с максимальным произведением элементов. C++
- Отразить двумерный массив с размером m x n относительно побочной диагонали
- C++ программирование с использованием динамических двумерных массивов