有效用户输入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 );