хочу заполнить двумерный массив из текстового файла в функции чтоб позже он обновлялся при перемещении курсора не знаю как дайте подсказку
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
void Fillmap (int arrmap[25][50], const char lenghtMap, const char widthMap)
{
for (int i = 0; i < lenghtMap; i++)
{
for (int j = 0; j < widthMap; j++)
{
arrmap[i][j] = 1;
}
}
}
void Printmap (int arrmap[25][50], const char lenghtMap, const char widthMap)
{
for (int i = 0; i < lenghtMap; i++)
{
for (int j = 0; j < widthMap; j++)
{
cout << (char)(arrmap[i][j]);
}
cout << endl;
}
}
int main()
{
setlocale(0, "");
const char lenghtMap = 25, widthMap = 50;
int arrmap[lenghtMap][widthMap];
Fillmap(arrmap, lenghtMap, widthMap);
Printmap(arrmap, lenghtMap, widthMap);
}
//вот такую беду пробовал пишет что-то непонятное
string adres = "map.txt";
ifstream maptxt;
maptxt.open(adres);
if (!maptxt.is_open())
{
cout << "фаил с картой не найден!" << endl;
}
else
{
cout << "Фаил открыт." << endl;
string a;
while (!maptxt.eof())
{
a = "";
maptxt >> a;
cout << a << endl;
}
}
maptxt.close();
╔════════════════════════════════════════════════╗ ║ ☺ ☼ ◙ ☼ ☼ ◙║ ║ ╔ ║ ╚════════════╝ ╚═════════════════════╝ ☼ ☼║ ║ ║ ☼ ☼ ◙ ☼ ☼║ ║ ║◙╔═╗ ╔ ═════════════════════════════════════ ╝ ║ ║ ║☼║ ║ ☼ ║ ║ ║☼║ ║ ╔═════════ ══════════════╗ ╔══════╗ ║ ║ ║◙║ ║ ║☼ ☼ ◙║ ║ ☼ ║ ║ ║ ║☼ ║ ║☼║ ║ ║ ╚═══ ╚════════════════════════════════════════════════╝ примерный текст файла
Ответы (1 шт):
Автор решения: bloody
→ Ссылка
я постарался реализовать твою задумку:
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
void gettxt (string& buf)
{
ifstream openf ("map.txt");
string tmpbuf;
while (1)
{
getline (openf, tmpbuf) ;
if (tmpbuf.size == 0)
{
break;
}
buf += tmpbuf += "\n";
}
openf.close () ;
}
int main ()
{
string str;
gettxt (str) ;
cout << str;
system ("pause") ;
}
Так же хочу указать на твои ошибки:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
void Fillmap (int arrmap[25][50], const char lenghtMap, const char widthMap) // Первое: const char* здесь никак не нужен, size_t подойдёт для этих параметров. Второе: размер массива и так известен и передача его размера будет лишней тратой времени стека. Если тебе не удобно по какой-то причине писать его как цифры: Можешь сделать макрос: #define array_lenghtmap 25 и #define array_widthmap 50
{
for (int i = 0; i < lenghtMap; i++) // Вряд ли скомпилируется тк i = int, а lengthmap = const char*
{
for (int j = 0; j < widthMap; j++) // Вряд ли скомпилируется тк i = int, а lengthmap = const char*
{
arrmap[i][j] = 1;
}
}
}
void Printmap (int arrmap[25][50], const char lenghtMap, const char widthMap) // То же самое с параметрами
{
for (int i = 0; i < lenghtMap; i++) // Вряд ли скомпилируется тк i = int, а lengthmap = const char*
{
for (int j = 0; j < widthMap; j++) // Вряд ли скомпилируется тк i = int, а lengthmap = const char*
{
cout << (char)(arrmap[i][j]);
}
cout << endl;
}
}
int main()
{
setlocale(0, "");
const char lenghtMap = 25, widthMap = 50;
int arrmap[lenghtMap][widthMap];
Fillmap(arrmap, lenghtMap, widthMap);
Printmap(arrmap, lenghtMap, widthMap);
}
//вот такую беду пробовал пишет что-то непонятное <-- В следующий раз постарайтесь написать текст ошибки, будь он понятен или нет
// Если вы прям так и пытались скомпилировать - ничего удивительного. Вы пытаетесь написать код вне любой области видимости.
string adres = "map.txt"; // Трата ресурсов ПК. Можно сделать следующее: ifstream maptxt("map.txt");
ifstream maptxt;
maptxt.open(adres); // Можно и конструктором обойтись, но ладно
if (!maptxt.is_open())
{
cout << "фаил с картой не найден!" << endl; // Если вы хотели добавить это в функцию: стоит написать #define MYPROG_INVALID_FILE 0x238874232 и throw MYPROG_INVALID_FILE; , а после return;
}
else
{
cout << "Фаил открыт." << endl;
string a;
while (!maptxt.eof())
{
a = "";
maptxt >> a;
cout << a << endl;
}
}
maptxt.close();