提问人:Alex Noronha-Hyde 提问时间:3/22/2021 最后编辑:drescherjmAlex Noronha-Hyde 更新时间:3/22/2021 访问量:104
如何在没有核心倾销的情况下读取直到 eof?
How do read until eof without the core dumping?
问:
我目前正在尝试从头开始制作一个学习 Ai,以熟悉它的工作原理(项目代码链接在这里 我目前的问题是找到一种方法,一旦达到 eof 就停止第 20 行的 while 循环。我尝试过使用 fin.eof,使用它时得到的输出是“分段错误(核心转储)”。如何让代码正常运行?
这是我的代码:
#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);
}
答:
0赞
MikeCAT
3/22/2021
#1
在写入读取数据之前,必须添加读取数据的元素。
while(true){
// read first data
int sitValTemp;
fin >> sitValTemp;
if (!fin)
break;
// add elements
sits.sitVal.push_back(sitValTemp);
sits.opVal1.push_back(0);
sits.opVal2.push_back(0);
sits.opVal3.push_back(0);
// read rest data
fin >> sits.opVal1[i];
fin >> sits.opVal2[i];
fin >> sits.opVal3[i];
i++;
}
评论
sits.sitVal[i]
struct rowData { int sitVal, opVal1, opVal2, opVal3; };
std::vector<rowData>
fin >> sits.sitVal[i];
-- 将其更改为 ,然后您将发现 seg 故障的原因。fin >> sits.sitVal.at(i);