有效用户输入c++; 新的C++,但我有一些编程经验……/P>
我正在尝试一种非常基本的方法,从用户那里获取文件名,然后打开文件。我正在使用一些非标准库(斯坦福图书馆),但我认为这不会影响事情有效用户输入c++; 新的C++,但我有一些编程经验……/P>,c++,file-io,ifstream,C++,File Io,Ifstream,我正在尝试一种非常基本的方法,从用户那里获取文件名,然后打开文件。我正在使用一些非标准库(斯坦福图书馆),但我认为这不会影响事情 ifstream in; while(true){ string filename=""; cout << "Enter the name of the file. "; getline(cin, filename); in.open(filename.c_str()); if (in.fail()){
ifstream in;
while(true){
string filename="";
cout << "Enter the name of the file. ";
getline(cin, filename);
in.open(filename.c_str());
if (in.fail()){
cout << "ERROR opening file. Try again.";
} else {
break;
}
}
... more code ...
ifstreamin;
while(true){
字符串filename=“”;
cout在if(in.fail()){
之后尝试调用in.clear()
。这将清除文件状态位,以便下次调用fail()
将看到上一次open
调用的结果(而不是看到上一次失败的open
状态):
设置错误状态标志为错误控制状态设置新值
所有处于控制状态的位都被新的位替换
调用之前存在的值无效
如果函数是以goodbit作为参数调用的(这是
默认值)清除所有错误标志
这可能是正确的答案,但除非你解释原因,否则毫无意义。编程不应该是反复试验。“嘿,如果我在条件后添加clear
,它会起作用!让我们这样做吧。”当您输入无效数据时,输入流将进入错误状态,它将忽略将来的输入。如果需要再次使用输入流,请尝试清除该流。但我有一些情况表明,即使在清除输入流后问题仍然存在。
void clear ( iostate state = goodbit );