我似乎无法弄清楚我的程序崩溃的原因。当我在" //显示名称选项"下删除while循环时程序运行正常。代码在GCC上编译,没有任何警告。它可能是我的编译器吗?它与fstream有关吗?帮助将不胜感激。
噢,是的。如果您想知道这个程序将读取data.txt并将适当的数据加载到播放器功能的实例。目前处于不完整状态。#include <iostream>
#include <fstream>
#include <string>
using namespace std;
#define cls system("cls");
bool Pload = false;
void menu();
struct player {
int Px, Py, life = 20;
string name = "";
};
main() {
menu();
}
void menu() {
string cLine,names,input;
int x,i,lineNum = 0;
fstream data;
menu:
data.open("data.txt");
//Gets list of all names in data.txt, Adds them to string names
while(data.good()) {
getline(data,cLine);
if(cLine[0] == '/') {
names += cLine;
}
}
names += '\n';
//Displays name options
cls
cout << "Welcome to W A L K.\n\nWhat is your name?\n";
while(names[i] != '\n')
{
cout << i;
if(names[i] == '/') {cout << endl;i++;} else {cout << names[i];i++;}
}
cout << endl;
getline(cin,input);
//checks if name exits and loads file data into player/world objects
data.close();
data.open("data.txt");
while(data.good()) {
lineNum++;
getline(data,cLine);
if(cLine.erase(0,1) == input) {
cls cout << "Found Name" << endl;
getline(cin, input);
}
}
//Restarts menu
data.close();
goto menu;
}
data.txt中
/Sammy
x:0
y:0
l:20
\
/Mary
x:7
y:9
l:20
\
/Dill
x:7
y:9
l:20
\
/Jack
x:7
y:9
l:20
\
答案 0 :(得分:3)
使用您的调试器会发现这一点,或只是使用一些cout
语句。
以下列方式声明i
时:
int x,i,lineNum = 0;
您声明3 int
并将lineNum
初始化为0
;但是其他两个仍然是单元化的,因此使用它们是不明确的行为。
while(names[i] != '\n') // UB, i is unitialised
首选每行声明并初始化一个变量,如下所示:
auto x = 0;
auto i = 0;
auto lineNum = 0;
使用auto
也会强制您将它们初始化为值。
如果你想在一行上写下所有内容,你必须写
auto x = 0, i = 0, lineNum = 0;
但它只是没有可读性,没有人会感谢你。