0
我想从用户那里得到一个文件位置。我在几十个没有问题的程序上使用了相同的getfile
函数。由于一些奇怪的原因,这一次总是在第一次尝试中返回一个无法打开的文件,但在第二次尝试后再接受它。我在getline
之前尝试过cin.clear();
,我在那里获取文件位置,但这没有任何帮助。我无法弄清楚为什么这表现太奇怪了。这里是我的getfile
功能:getfile()第一次尝试失败,但第二次尝试,我该如何解决这个问题?
void maze::getfile()
{
string filename;
char X;
cout << "please enter the location of the file you wish to input: " << endl;
getline(cin, filename);
cin.ignore(100, '\n');
inData.open(filename.c_str()); //opens file
while (!inData) //while the file is accesible
{
cout << "The file could not be opened.\nPlease try again: " << endl;
//error message for input validation
getline(cin, filename);
cin.ignore(100, '\n');
inData.open(filename.c_str());
}
for(int i = 1; i < 11; i++)
{
for(int u = 1; u < 11; u++)
{
inData >> X >>ws;
if(X == '1')
X = 219;
if(X == '0')
X = ' ';
floor[i][u] = X;
}
}
floor[0][0] = 201;
floor[0][11] = 187;
floor[11][0] = 200;
floor[11][11] = 188;
for(int i=1; i < 11; i++)
{
floor[0][i] = 205;
floor[11][i] = 205;
floor[i][0] = 186;
floor[i][11] = 186;
}
inData.close();
}
在这之前发生,这是在主菜单中调用的唯一的事情。我将一个变量choice =
设置为返回字符的主菜单函数,在本例中为'1'。任何想法,为什么它在第一个文件输入失败,而不是第二次尝试使用相同的文件?
第二次输入文件并打印迷宫一切看起来很完美。所以程序确实有效,只是不像我想要的那样干净利落 – user2087867
'X = 219;'这会溢出(未定义的行为),除非你的平台的'char'是'unsigned'。 – user657267
X = 219似乎在工作,它将字符设置为一个固体块,我用它来制作墙角色。第一次输入文件我得到“文件无法打开”,这意味着文件位置或打开文件有问题。但是我再次拖放同一个文件,一切都很好。它对我没有任何意义。 – user2087867