【发布时间】:2014-04-17 23:59:41
【问题描述】:
我正在尝试从用户那里获取文件位置。我在几十个程序上使用了相同的getfile 函数,没有任何问题。出于某种奇怪的原因,这个总是在第一次尝试时返回一个无法打开的文件,但在第二次尝试时接受它。我在获得文件位置的getline 之前尝试了cin.clear();,但这没有帮助。我不明白为什么这会表现得如此奇怪。这是我的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”。任何想法为什么它在第一次文件输入时失败,而不是在第二次尝试相同的文件?
【问题讨论】:
-
一旦第二次输入文件并打印迷宫,一切看起来都很完美。所以程序确实可以工作,只是没有我想要的那么干净
-
X = 219;这将溢出(未定义的行为),除非您的平台的char是unsigned。 -
X = 219 似乎正在工作,它将字符设置为我用来制作墙字符的实心块。第一次输入文件时,我得到“无法打开文件”,这意味着文件位置或打开文件有问题。但是我再次拖放同一个文件,一切都很好。它对我没有任何意义。
-
"X = 219 似乎在工作" 这是未定义行为的一个有效结果,另一个是 Bjarne 敲响你的门铃,当你开门时吸盘打你,你很幸运是前者.至于您的文件问题,听起来问题可能出在其他地方。
-
大声笑好的,我会不签名的。谢谢你的建议。