回 帖 发 新 帖 刷新版面

主题:C++中的I\O流问题求助

#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;
int main()
{double aver,bzc,m,sum=0;
int count=0;
ifstream fin;
fin.open("shuzi.dat");
if (fin.fail())
{ cout<<"Input file opening failed.\n";
  exit(1);
}
while(fin>>m)
{if(m!=' ')
{sum=sum+m;
count++;
}
}
fin.close();
aver=sum/count;
cout.setf(ios::fixed);
cout.setf(ios::showpoint);
cout.precision(3);
cout<<"the average is:"<<aver<<endl;
fin.open("shuzi.dat");
if (fin.fail())
{ cout<<"Input file opening failed.\n";
  exit(1);
}
while(fin>>m)
{if(m!=' ')
{bzc=(m-aver)*(m-aver);
cout<<"the bzc is"<<bzc<<endl;
}
}
fin.close();
return 0;
}

我写的这个程序是想把shuzi.dat文件中的双精度数字求平均,再分别求标准差,为啥平均求的事对的,可求不了标准差,运行显示Input file opening failed???

回复列表 (共4个回复)

沙发

再次open之前先clear试试看

板凳

好像不行诶。。

3 楼

ios::fail    Check if either failbit or badbit is set (public member function)
ios::good    Check if the state of the stream is good for i/o operations. (public member function)
ios::bad    Check if badbit is set (public member function)
ios::eof    Check if eofbit is set (public member function)
ios::clear    Set error state flags (public member function)

在打开前,文件的eof和fail被设置了。
但是单独clear清除这两个标志却不行,一定要clear ALL

4 楼

必须同时清除这两个标志
fin.clear() 

fin.clear(fin.rdstate() ^ (fstream::eofbit |fstream::failbit) );

我来回复

您尚未登录,请登录后再回复。点此登录或注册