循环有效用户输入c ++

时间:2012-07-25 15:55:28

标签: c++ file-io ifstream

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 ...

如果我第一次输入有效的文件名,它可以正常工作并继续。如果我输入了无效的文件名,我会收到错误消息并且它会循环询问另一个文件名,但是即使该文件有效,它也会将所有后续条目视为无效。我有什么想法我做错了吗?谢谢!

1 个答案:

答案 0 :(得分:2)

in.clear()之后尝试拨打if (in.fail()){。这将清除文件状态位,以便您对fail()的下一次调用将看到上次open调用的结果(而不是查看上次失败的open状态)。 From c++ docs

void clear ( iostate state = goodbit );
  

设置错误状态标志为错误控制状态设置新值。

     

控制状态中的所有位都被新的位替换;该   在通话之前存在的值无效。

     

如果使用goodbit作为参数调用该函数(即   默认值)清除所有错误标志。