Почему мой код для импорта числовых данных из текстового файла в 2D-массив не работает?

Данные в текстовом файле записываются в виде
0 23 4 23 16 .. и так далее.

Я хотел бы сохранить его в статическом массиве 5 * 5. Но когда я пытаюсь вывести массив, вывод — искаженный беспорядок чисел, а не данных, которые я хочу импортировать.

Это мой код

#include <iostream>
#include <fstream>
using namespace std;

char A[5][5];
int i = 0, j =0;
int main()
{

ifstream fin("File.txt");
if (fin.is_open())
{
cout << "The file has been opened successfully" << endl;
while(!fin.eof())
{
for(i = 0 ;  i<5; i++)
{
for(j =0; j<5; j++)
{
fin.get(A[i][j]);
}
}
}
}return 0;
}

0

Решение

Допустим, ваш «File.txt» содержит:

0 23 45 58 36 5 425 442 4

эти конкретные 25 (5 * 5) символов вы положили. (Да, пробелы считаются символами, а в таблицах ASCII это фактически 32-й символ). Если вы запустите эту функцию на нем:

for (size_t i = 0;i<5;++i)
for(size_t j = 0;j<5;++j)
{   cout << A[i][j] << setw (4);
cout << int (A[i][j]) << endl;
}

Вы получите этот вывод:

0  48
32
2  50
3  51
32
4  52
5  53
32
5  53
8  56
32
3  51
6  54
32
5  53
32
4  52
2  50
5  53
32
4  52
4  52
2  50
32
4  52

Записано в первой строке: символ, соответствующий вашей строке (в File.txt, и если вы проверите, что я положил, то же самое по вертикали), а во второй строке соответствующие целочисленные значения.
Я думаю, это может быть вашей проблемой.

0

Другие решения

Я предполагаю, что вы хотите ввести номер данных по номеру.
Однако функция, которую вы вызываете:
std::istream& get (char& c) принимает данные символ за символом, согласно:

(1) один символ
Извлекает один символ из потока.
Символ либо возвращается (первая подпись), либо устанавливается как значение его аргумента (вторая подпись).

Источник: http://www.cplusplus.com/reference/istream/istream/get/

Для ввода, разделенного пробелами, рассмотрите использование обычного оператора >>, например:

std::string word;
while (file >> word)
{
...
}
0

По вопросам рекламы [email protected]