Я пытаюсь сделать очень простую вещь, читать числа из файла, используя 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
Я не понимаю, что я делаю неправильно. Я думал, что >> заботится о пространствах табуляции.
factor
объявлен как int
; это должно быть float
или же double
, И аналогично для unit_cell
, который не объявлен в вашем примере кода.
Я согласен с @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;
}