あなたはC++scanf
を使用しているので、std::ifstream
代わりに を使用しないでください。
#include <fstream>
using namespace std;
ifstream file("input.txt");
int x, y, z;
float eta, phi;
// Read you file until the end
while( file >> x >> y >> z >> eta >> phi )
{
// Print the values
cout << "x : " << x << " y :" << y << " z : " << z << " eta : " << eta << " phi : " << phi << endl;
}
Armen Tsirunyan が示したように、 を使用しstruct
て でデータを保存することもできますvector
。それは、データで何をしたいかによって異なります。
構造の利点は、すべてのデータを含む線を表すエンティティがあることです。また、 をオーバーロードしoperator>>
て、よりクリーンなコードでファイルを読み取ることができます。
コードは次のようになります。
#include <fstream>
#include <vector>
using namespace std;
struct s_Data
{
int x, y, z;
float eta, phi;
};
istream& operator >> (istream& iIn, s_Data& iData)
{
return iIn >> iData.x >> iData.y >> iData.z >> iData.eta >> iData.phi;
}
ifstream file("input.txt");
// Read you file until the end
s_Data data;
vector<s_Data> datas;
while( file >> data )
{
// Print the values
cout << "x : " << data.x << " y :" << data.y << " z : " << data.z << " eta : " << data.eta << " phi : " << data.phi << endl;
// Store the values
datas.push_back( data );
}
ここでs_Data
は、必要な 5 つの値で線を表します。はvector<s_Data>
、ファイルで読み取られたすべての値を表します。次のようにして読むことができます:
unsigned int size = datas.size();
for ( unsigned int i = 0; i < size; i++ )
cout << datas[i].x; // read all the x values for example