0

非常に単純なことをしようとしています.C++でifstreamを使用してファイルから数値を読み取ります. 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

私は自分が間違っていることを理解していません。>>がタブスペースを処理すると思いました。

4

2 に答える 2

2

factorとして宣言されていintます。floatまたはである必要がありdoubleます。同様にunit_cell、サンプル コードでは宣言されていません。

于 2012-11-03T02:36:29.230 に答える
1

@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;
}
于 2012-11-03T02:43:44.800 に答える