こんにちはC++初学者です。以下のことを実現出来るであろうプログラムを書いたのですがエラーの原因が分からないため質問させていただきます。
・やりたいこと
csv形式で保存したファイルを読み込んで構造体型の配列に格納したい
・詳細
①x,y,z(座標)、bx,by,bz(その座標における値)の計6つの値を持つ構造体を定義しました。
②次に、二次元の動的配列クラスvector(2×2)を用意しました。この各配列要素は①の構造体となっています。
二次元配列である理由は、行に複数の異なる座標データを、列に時間データをまとめたいからです。
・発生しているエラー
bash: line 12: 2062 Segmentation fault (core dumped) $file.o
読み込んだCSVファイル
0,0,0,3,4,5,1,1,1,6,7,8 2,2,2,9,10,11,3,3,3,12,13,14
この数字は
x,y,z,bx,by,bz,x,y,z,bx,by,bz
x,y,z,bx,by,bz,x,y,z,bx,by,bz,
に対応している
プログラム
#include<iostream> #include <fstream> #include <string> #include <sstream> #include <vector> #define timestep 2 #define meshnum 2 using namespace std; struct pb{ double x,y,z,bx,by,bz; }; //文字列を格納できるvector型のsplit関数を宣言 vector<string> split(string& input, char delimiter) { istringstream stream(input); string field; vector<string> result; while (getline(stream, field, delimiter)) { result.push_back(field); } return result; } int main() { int i,j=0; //構造体型多次元配列を用意 vector<vector<struct pb>>alldata(2,vector<struct pb>(2)); ifstream ifs("codetest.csv"); string line; while (getline(ifs, line)) { vector<string> strvec = split(line, ',');//1行読み込んでstrvecに格納 for(i=0;i<meshnum;i++){ alldata[j][i].x=stod(strvec.at(6*i)); alldata[j][i].y=stod(strvec.at(6*i+1)); alldata[j][i].z=stod(strvec.at(6*i+2)); alldata[j][i].bx=stod(strvec.at(6*i+3)); alldata[j][i].by=stod(strvec.at(6*i+4)); alldata[j][i].bz=stod(strvec.at(6*i+5)); j++; } } for(j=0;j<timestep;j++){ for(i=0;i<meshnum;i++){ cout<<alldata[j][i].x<<alldata[j][i].y<<alldata[j][i].z<< alldata[j][i].bx<<alldata[j][i].by<<alldata[j][i].bz<<endl; } } return 0; }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/08/10 15:05