-1

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

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

4

1 回答 1

2

in.clear()之后尝试调用if (in.fail()){。这将清除文件状态位,因此您的下一次调用fail()将看到最后一次open调用的结果(而不是查看最后一次失败的open状态)。来自 c++ 文档

void clear ( iostate state = goodbit );

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

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

如果使用 goodbit 作为参数(这是默认值)调用函数,则所有错误标志都将被清除。

于 2012-07-25T15:57:16.467 回答