如何在没有核心倾销的情况下读取直到 eof?

How do read until eof without the core dumping?

提问人:Alex Noronha-Hyde 提问时间:3/22/2021 最后编辑:drescherjmAlex Noronha-Hyde 更新时间:3/22/2021 访问量:104

问:

我目前正在尝试从头开始制作一个学习 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);
}
C++ While-Loop EOF

评论

0赞 πάντα ῥεῖ 3/22/2021
stackoverflow.com/questions/5605125/......
0赞 Alan Birtles 3/22/2021
请在问题中提供一个最小的可重复示例,而不依赖外部链接
3赞 Alan Birtles 3/22/2021
你的向量都是空的,所以等有未定义的行为sits.sitVal[i]
1赞 MikeCAT 3/22/2021
@tadman我认为并且更好。struct rowData { int sitVal, opVal1, opVal2, opVal3; };std::vector<rowData>
2赞 PaulMcKenzie 3/22/2021
fin >> sits.sitVal[i];-- 将其更改为 ,然后您将发现 seg 故障的原因。fin >> sits.sitVal.at(i);

答:

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++;
    }