【发布时间】:2021-03-22 13:48:23
【问题描述】:
我目前正在尝试从头开始学习 Ai 以熟悉它是如何工作的(项目代码链接 here 我当前的问题是找到一种方法来停止第 20 行的 while 循环,一旦 eof 已经已达到。我尝试使用 fin.eof,使用它时得到的输出是“Segmentation fault (core dumped)”。我怎样才能让代码正常运行?
这是我的代码:
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
struct Match{
vector<int> sitVal;
vector<int> opVal1;
vector<int> opVal2;
vector<int> opVal3;
};
//fills chosen Match with data from file
void conData(string file, Match& sits){
ifstream fin;
fin.open(file);
int jump;
fin >> jump;
int i = 0;
while(true){
fin >> sits.sitVal[i];
if (!fin)
break;
fin >> sits.opVal1[i];
fin >> sits.opVal2[i];
fin >> sits.opVal3[i];
i++;
}
//following is for testing
cout << sits.sitVal[0];
cout << sits.opVal1[0];
cout << sits.opVal2[0];
cout << sits.opVal3[0];
}
int main(){
Match sits;
conData("Data.txt", sits);
}
【问题讨论】:
-
请在问题中提供minimal reproducible example,不要依赖外部链接
-
你的向量都是空的,所以
sits.sitVal[i]等有未定义的行为 -
@tadman 我认为
struct rowData { int sitVal, opVal1, opVal2, opVal3; };和std::vector<rowData>更好。 -
fin >> sits.sitVal[i];-- 改成fin >> sits.sitVal.at(i);,你就会发现seg faults的原因。
标签: c++ while-loop eof