C++文件流陷入死循环

#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;
}

以上是一段代码,问题是:当我在源文件的目录下新建一个abc。txt文档,编译后,一开始输入abc。txt就显示有多少个字符,如果一开始输错了,它会提示再次输入正确的文本,当再输入abc。txt时就会陷入死循环,不知道是为什么 希网高手解答

第1个回答  2019-06-17
在每次进入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对象,避免操作失败一次,之后打开文件也全部失败。
第2个回答  2009-08-07
在每次进入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对象,避免操作失败一次,之后打开文件也全部失败。本回答被提问者采纳

一段c++代码陷入死循环了,高手帮忙...
像这样进行输入判断就可以了.然后再在后面加上你的下面循环语句即可.int num=0; \/\/学生数目 do \/\/判断,只能输入1-10的数字 { cout<<"你有几个学生(1-10)?";cin>>num;\/\/这儿有个错误,惹输入的是字母,则程序会陷入死循环 if(num>10||num<1)cout<<"输入错误,你只能拥有至少1个,至...

一段c++代码陷入死循环了,高手帮忙...
cerr<double d;">";cin>>num;\/s;;return 1;} } 像这样进行输入判断就可以了;cout<<"请输入一些数字(在最后输入end结束):",改为num<10&&num>;if (!cin.eof()){ cin;if (s != "end"< 判断,只能输入1-10的数字 { cout<<"你有几个学生(1-10);\/这儿有个错误;string s;cin> ...

...下面的程序,如果输入的不合法,那就将陷入死循环,为什么?如何...
接着while循环继续读输入缓冲区,依然类型不匹配,于是就成了死循环

...后输入数字循环正常,但输入字母就会陷入死循环呢?求解!
便还是认为enter没有输入,不会读取缓冲器的字母;因此无限循环

C++程序,进入死循环。怎么改才能让他正常循环
cout << player="" one="" cin="">> player1;cout << player="" two="" cin="">> player2;while (player1 != "0" && player2 != "0"){ 改为 while (player1 != "0" && player2 != "0"){ cout << player="" one="" cin="">> player1;cout << player="" two=...

C++ 为什么while(! iofile.eof() )读取文件会出现死循环
具体为啥会死循环没调试不太清楚,但是比较可能的一个问题是 iofile.seekp(i*sizeof(stu_obj),ios::beg);的时候指向文件尾了 后面的读取操作就会瓦掉。可以改为 while(!iofile.eof()){ iofile>>stu_obj.tag>>stu_obj.num>>stu_obj.name>>stu_obj.score;stu_obj.disp();i++;iofile....

C++ 为什么while(! iofile.eof() )读取文件会出现死循环
eof() 函数本身,并不到输入流里去取数,不去读取文件。单用 while(!iofile.eof()); 由于没有别的读语句去读文件,而自身又不会去读取文件,只是不断地判断 iofile的 EOF 标志位状态,那就永远是 "没有读到EOF". 死循环。中国教科书 一脉相承,爱用 while(!fp.eof()) { 读,打印;}...

c++当输入非法字符时,陷入死循环,如何解决 比如输入为字符和符号_百度...
istream 会设置 flag ,在输入之后检查 istream 的 good() 函数是否返回 false,如果返回 false 直接退出即可

C语言陷入死循环的原因
=== 知道不进行无符号类型转换,程序会陷入死循环了啊,却不知道原因。看下面:这个c的最大正整数只能到127,c<255永远成立。情况是:c++到127之后变为了负数(称为算术溢出),一直加又从0开始了,所以死循环。把 char c=10;改为 int c;赋值没用,因为for循环又重新赋值了。至于出现蜂鸣声,是...

C++,eof()死循环
不能跳出循环是原因不在eof,在Length_rec函数里!!由于这个函数的while永远不会结束,导致了永远不可能return i,也就永远退不出eof。修改为\\ int Records::Length_rec(char a[]){ int i=0;while(a[i]!='\\0') \/\/这里修改了。i++;return i;} ...

相似回答