请问这个程序那里错了?谢谢!

来源:百度知道 编辑:UC知道 时间:2024/06/08 12:02:50
#include<iostream>
#include<fstream>
using namespace std;
void main()
{
char filename[50];
cout<<"请输入文件名及路径:";
cin>>filename;
ifstream file;
file.open(filename);
while(!file.is_open())
{
file.close();
cout<<"错误!文件不存在,请重新输入:";
cin>>filename;
file.open(filename);
}
char a[10];
file>>a;
cout<<a<<endl;
file.close();
}
这个程序用VC++2005编译,假设在C盘下有一个文件a.txt,内容是abcd。
运行该程序时,输入文件名c:\a.txt后回车,正常显示文件内容abcd,但第一次若输入文件名错误,提示重输,输入正确文件名后却不显示文件内容,这是为什么?请大家帮帮我,谢谢!

while(!file.is_open())
{
file.close();
file.clear(); // 加上这一句
cout<<"错误!文件不存在,请重新输入:";
cin>>filename;
file.open(filename);
}

原因是如果前一个文件读到文件末尾时会自动添加状态标志fail和eof,而这个标志在下一次读取时不会自动清除,所以要用file.clear()来清除这个状态标志。