首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 计算机考试 > 等级考试 > 复习指导 >

C++基础解析五十四(2)

2009-01-08 
C++风格的文件输入输出流

  下例示例,表示出了rdstate()的用法:
#include <iostream>
  using namespace std;
  int main()
  {
  int a;
  cin>>a;
  cout<<cin.rdstate()<<endl;
  if(cin.rdstate() == ios::goodbit)
  {
  cout<<"输入数据的类型正确,无错误!"<<endl;
  }
  if(cin.rdstate() == ios_base::failbit)
  {
  cout<<"输入数据类型错误,非致命错误,可清除输入缓冲区挽回!"<<endl;
  }
  system("pause");
  }
  另一种方法则是使用下面任何一个函数来检测相应的输入/输出状态:
  bool bad();
  bool eof();
  bool fail();
  bool good();
  下例示例,表示出了上面各成员函数的用法:#include <iostream>
  using namespace std;
  int main()
  {
  int a;
  cin>>a;
  cout<<cin.rdstate()<<endl;
  if(cin.good())
  {
  cout<<"输入数据的类型正确,无错误!"<<endl; 
  }
  if(cin.fail())
  {
  cout<<"输入数据类型错误,非致命错误,可清除输入缓冲区挽回!"<<endl;
  }
  system("pause");
  }

    如果错误发生,那么流状态既被标记为错误,你必须清除这些错误状态,以使你的程序能正确适当地继续运行。要清除错误状态,需使用clear()函数。此函数带一个参数,它是你将要设为当前状态的标志值。,只要将ios::goodbit作为实参。
  示例代码如下:#include <iostream>
  using namespace std;
  int main()
  {
  int a;
  cin>>a;
  cout<<cin.rdstate()<<endl;
  cin.clear(ios::goodbit);
  cout<<cin.rdstate()<<endl;
  system("pause");
  }
  通常当我们发现输入有错又需要改正的时候,使用clear()更改标记为正确后,同时也需要使用get()成员函数清除输入缓冲区,以达到重复输入的目的。
  示例代码如下:#include <iostream>
  using namespace std;
  int main()
  {
  int a;
  while(1) //也可以写成for(;1;)
  {
  cin>>a;
  if(!cin)//条件可改写为cin.fail()
  {
  cout<<"输入有错!请重新输入"<<endl;
  cin.clear();
  cin.get();
  }
  else
  {
  cout<<a;
  break; 
  }
  }
  system("pause");
  }
  最后再给出一个对文件流错误标记处理的例子,巩固学习,代码如下:#include <iostream>
  #include <fstream>
  using namespace std;
  int main()
  {
  ifstream myfile("c:1.txt",ios_base::in,0);
  if(myfile.fail())
  {
  cout<<"文件读取失败或指定文件不存在!"<<endl;
  }
  else
  {
  char ch;
  while(myfile.get(ch))
  {
  cout<<ch;
  }
  if(myfile.eof())
  {
  cout<<"文件内容已经全部读完"<<endl;
  }
  while(myfile.get(ch))
  {
  cout<<ch;
  }
  }
  system("pause");
  }

 

3COME考试频道为您精心整理,希望对您有所帮助,更多信息在http://www.reader8.com/exam/

热点排行