Данные в текстовом файле записываются в виде
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;
}
Допустим, ваш «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, и если вы проверите, что я положил, то же самое по вертикали), а во второй строке соответствующие целочисленные значения.
Я думаю, это может быть вашей проблемой.
Я предполагаю, что вы хотите ввести номер данных по номеру.
Однако функция, которую вы вызываете:
std::istream& get (char& c)
принимает данные символ за символом, согласно:
(1) один символ
Извлекает один символ из потока.
Символ либо возвращается (первая подпись), либо устанавливается как значение его аргумента (вторая подпись).
Источник: http://www.cplusplus.com/reference/istream/istream/get/
Для ввода, разделенного пробелами, рассмотрите использование обычного оператора >>, например:
std::string word;
while (file >> word)
{
...
}