我的程序很疯狂,老实说我很困惑(c++)

My program is crahing, and honestly i am confused (c++)

本文关键字:c++ 老实说 程序 疯狂 我的      更新时间:2023-10-16

由于某种原因,我的程序在收到用户的输入后立即崩溃。然而,最奇怪的是,只有当用户输入Yes时,它才会崩溃,而不是当他们输入n o时。我认为这与类Players有关。我已经尝试过通过所有常规方法进行调试。断点似乎不起作用,因为如果我把它放在cout << "Is this the first time...之后,没有一个变量会有任何数据,因为它们没有被赋值。它完美地工作,直到我制作了readPlayerData函数,然后崩溃开始了。

using namespace std;
int main() {
    mt19937 rand_engine(time(nullptr));
    vector<Player> plyrs;
    srand(time(NULL));
    bool firstTimer = false;
    cout << "Is this the first time this program has run?" << endl;
    string firstTime;
    cin >> firstTime;
    if (firstTime == "Yes" || firstTime == "yes") {
        firstTimer == true;
        for (int i = 0; i < 30; i++) {
            int limit = 18; // rand() % (25 - 18) + 18;
            for (int w = 0; w < limit; w++) {
                int z = plyrs.size();
                plyrs.resize(z + 1);
                plyrs[z].setPlayeName(rand_engine);
                plyrs[z].setPlyrVal();
                plyrs[z].setPlayerTeam(i);
            }
        }
        string human_input;
        cout << "Pick a # between 1-30, this will be your team: " << endl;
        cin >> human_input;
        int human_teamInput = 0;
        human_teamInput = atoi(human_input.c_str());
        ofstream plyrdata;
        plyrdata.open("plyr.txt");
        plyrdata << human_teamInput << endl;
        plyrdata.close();
        ofstream playerSaveData;
        playerSaveData.open("savedata.txt");
        for (int i = 0; i < plyrs.size(); i++) {
            playerSaveData << plyrs[i].plName << endl;
            playerSaveData << plyrs[i].plOvr << endl;
            playerSaveData << plyrs[i].ploaw << endl;
            playerSaveData << plyrs[i].pldaw << endl;
            playerSaveData << plyrs[i].pldspg << endl;
            playerSaveData << plyrs[i].pldsps << endl;
            playerSaveData << plyrs[i].plSpg << endl;
            playerSaveData << plyrs[i].plSps << endl;
            playerSaveData << plyrs[i].plteam
                           << (i < (plyrs.size() - 1) ? "n" : "");
        }
        playerSaveData.close();
        assemble_Team_Data();
    }
    else {
        assemble_Team_Data();
    }
    Sleep(10000);
    return 0;
}

这是readPlayerData()的代码

void readPlayerData() {
    numFnames = 1;
    numLnames = 1;
    string line;
    ifstream fnameFile("PlayersFname.txt");
    if (fnameFile.is_open()) {
        while (fnameFile.eof() == false) {
            plFname.resize(numFnames);
            getline(fnameFile, line);
            numFnames += 1;
        }
        fnameFile.close();
    }
    ifstream lnameFile("PlayersLname.txt");
    if (lnameFile.is_open()) {
        while (lnameFile.eof() == false) {
            plLname.resize(numLnames);
            getline(lnameFile, line);
            numLnames += 1;
        }
        lnameFile.close();
    }
}
void setPlayeName(mt19937& rand_engine) {
    readPlayerData();
    uniform_int_distribution<int> fname_rand(0, numFnames);
    string fname = plFname[fname_rand(rand_engine)];
    uniform_int_distribution<int> lname_rand(0, numLnames);
    string lname = plLname[lname_rand(rand_engine)];
    plName = string(fname + " " + lname);
}

不太可能是你的崩溃,但这段代码很可怕:

if (fnameFile.is_open())
{
    while (fnameFile.eof() == false)
    {
        plFname.resize(numFnames);
        getline(fnameFile,line);
        numFnames += 1;
    }
    fnameFile.close();
}

它没有正确检查文件结尾,因为文件结尾发生在getline期间,而不是之前。而line变量毫无用处。尝试

while (getline(fnameFile,line)) plFnames.push_back(line);
fnameFile.close();
相关文章: