C++文件流陷入死循环

来源:百度知道 编辑:UC知道 时间:2024/07/04 17:52:59
#include <iostream>
#include <fstream>

const int Size=20;
int main()
{
using namespace std;
char filename[Size];
char ch;
ifstream inFile;
int count=0;

cout<<"etr name of data file: ";
cin.getline(filename,Size);
inFile.open(filename);
while (!inFile.is_open())
{
cout << "Could not open the file " << filename << endl;
cout << "Plz etr right name:\n";
cin.getline(filename,Size);
inFile.open(filename);
if(inFile.is_open())
break;

}

inFile>>ch;
while(inFile.eof()==0)
{

count++;
inFile>>ch;

}

cout<<"including "<<count<<" chars\n";
inFile.close();
return 0;
}

以上是一段代码,问题是:当我在源文件的目录下新建一个a

在每次进入while语句的一开始加入 inFile.clear();即如下:
while (!inFile.is_open())
{
inFile.clear();
cout << "Could not open the file " << filename << endl;
cout << "Plz etr right name: \n";
cin.getline(filename,Size);
inFile.open(filename);
if(inFile.is_open())
break;
}
因为在fstream对象打开文件不成功后,会设置_MyState为failbit,所以必须清空fstream对象,避免操作失败一次,之后打开文件也全部失败。