gpt4 book ai didi

c++ - 我的程序崩溃了,我很困惑(c++)

转载 作者:行者123 更新时间:2023-12-02 00:12:34 29 4
gpt4 key购买 nike

由于某种原因,我的程序在收到用户的输入后立即崩溃。然而最奇怪的部分是,只有当用户输入 Yes 时它才会崩溃。 ,如果他们输入 n 则不会o。我的想法是,这与类(class)有关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();

关于c++ - 我的程序崩溃了,我很困惑(c++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25492561/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com