вход — Ошибка чтения файла C ++ C ++

Я пытаюсь сделать очень простую вещь, читать числа из файла, используя ifstream в C ++.
Мой входной файл называется POSCAR

supercell
1.00000000000000
7.3287291297858630    0.0000000000000000    0.0000000000000000
0.0000000000000000    7.3287291297858630    0.0000000000000000
0.0000000000000000    0.0000000000000000    7.3287291297858630
Au   Cu
1    31

Мой код для чтения этих строк выглядит следующим образом:

ifstream poscar("POSCAR");
getline(poscar,skip); //Skipping comment first line
cout<<skip<<endl;
// Reading in the cubic cell coordinates
int factor;
poscar>>factor;
cout<<factor<<endl;
int nelm[10]; // number of elements in the alloy
float ax,ay,az,bx,by,bz,cx,cy,cz;
poscar>>unit_cell[0][0]>>unit_cell[0][1]>>unit_cell[0][2];
poscar>>unit_cell[1][0]>>unit_cell[1][1]>>unit_cell[1][2];
poscar>>unit_cell[2][0]>>unit_cell[2][1]>>unit_cell[2][2];

Я получаю эту ошибку при выводе прочитанного:

supercell
1inf7.328730
0inf7.32873
7.3287291297858630
-142571760010922
Bus error

Я не понимаю, что я делаю неправильно. Я думал, что >> заботится о пространствах табуляции.

0

Решение

factor объявлен как int; это должно быть float или же double, И аналогично для unit_cell, который не объявлен в вашем примере кода.

2

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

Я согласен с @JosephQuinsey. Вот код, который я написал в качестве теста:

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

int main()
{
string skip;
ifstream poscar("/tmp/POSCAR.txt");
getline(poscar, skip);
cout << skip << endl;

while (poscar.good())
{
double factor;
poscar >> factor;
cout << factor << endl;
}

poscar.close();
return 0;
}
1