getfile()在第一次尝试时失败,但在第二次尝试时仍在工作,我该如何修复此问题
getfile() is failing on 1st try but working on second, how can i fix this?
我正在尝试从用户那里获取文件位置。我已经在几十个程序上使用了相同的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"。你知道为什么它在第一次输入文件时失败,而不是在第二次尝试相同的文件时失败吗?
我敢肯定,在第一次调用std::getline
之前,您在流中留下了一条换行符(可能还有scanf()
、cin>>
、gets()
),这样它就会为filename
提供一个空字符串,之后,换行符就会被吃掉,所以第二次它运行良好。
相关文章:
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 如何针对特定情况调试和修复此双自由内存损坏问题
- 如何修复带有 clang 的参数'args'缺少默认参数的问题?
- 如何修复 Onnx运行时会话>运行问题?
- 标准对此指向成员函数类型模板参数有何说明?是我的代码有误,还是 MSVS 16.6 有问题?
- C++指针问题:如何修复这些代码中的错误?
- 使用双包装器类进行位操作(C++、clang)修复性能下降问题
- 如何修复我的链表读数不一致的问题?
- 如何修复macOS线程互斥锁性能缓慢的问题?
- 如何使用std::cin函数后修复从文件读取的问题
- 如何修复问题中的"teminated due to timeout"错误 数组操作 |黑客兰克?
- 如何修复MSVC++(Microsoft Visual studio)中"macro overloading"的可变参数宏相关问题?
- 修复了安装 OSRM 时使用"make"命令时的构建问题
- 如何修复关卡顺序遍历问题(二叉树)的无限循环错误
- C 如何在Typedef模板和类之间修复依赖关系问题
- 弄清楚如何修复二十一点程序的问题C++
- 如何修复C++中文件的输入和输出问题
- 如何修复调用"Atoi"没有匹配功能的问题?
- POCO C 将问题与Conan Dependency Manager联系起来,我将如何修复它
- 如何修复对strstr没有匹配函数调用的问题