C ++新手,但我有一些编程经验......
我正在尝试一种非常基本的方法来从用户获取文件名,然后打开文件。我正在使用一些非标准库(斯坦福大学图书馆),但我认为这不会影响事情。
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 ...
如果我第一次输入有效的文件名,它可以正常工作并继续。如果我输入了无效的文件名,我会收到错误消息并且它会循环询问另一个文件名,但是即使该文件有效,它也会将所有后续条目视为无效。我有什么想法我做错了吗?谢谢!
答案 0 :(得分:2)
在in.clear()
之后尝试拨打if (in.fail()){
。这将清除文件状态位,以便您对fail()
的下一次调用将看到上次open
调用的结果(而不是查看上次失败的open
状态)。 From c++ docs:
void clear ( iostate state = goodbit );
设置错误状态标志为错误控制状态设置新值。
控制状态中的所有位都被新的位替换;该 在通话之前存在的值无效。
如果使用goodbit作为参数调用该函数(即 默认值)清除所有错误标志。