我有一个while循环,在输入位置或文件名之前抛出异常。这是代码:
cout << "enter file name or location> " << flush;
while (true)
{
string thefilename;
getline( cin, thefilename );
thefile.open( thefilename.c_str() );
if (thefile) break;
cout << "Invalid file. Please enter file name or location> " << flush;
}
while(getline(thefile, temp))
cout << temp << endl;
thefile.clear();
thefile.open("blabla.txt");
cout << endl;
thefile.close();
system("pause");
return 0;
}
当我跑这个我得
enter file name or location>Invalid file. Please enter file name or location>
而不是
enter file name or location>
答案 0 :(得分:5)
你几乎肯定省略了有趣的代码:在输入文件名之前发生了什么!可能之前,它之前是一些格式化的输入(即,使用std::cin >> value
),例如,读取数字:格式化的输入停止在与格式不匹配的第一个字符处。例如,它在因使用回车键输入值而遇到的换行符处停止。
要解决这个问题,你应该摆脱领先的空白,例如,使用std::ws
操纵器:
while (std::getline(std::cin >> std::ws, thefilename)) {
...
}
或者,您可能希望ignore()
在前面的输入之后包含换行符的所有内容:
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
while (std::getline(std::cin, thefilename)) {
...
}