设为首页 加入收藏

TOP

c++流状态的查询和控制(一)
2013-12-12 14:45:24 来源: 作者: 【 】 浏览:515
Tags:状态 查询 控制

  c++流状态的查询和控制,代码:

  #include <iostream>

  #include <limits>

  #include <stdexcept>

  using namespace std;

  int main()

  {

  int ival;

  while(cin 》 ival, !cin.eof())

  {

  cout 《 "hello:" 《 cin.fail() 《 endl;

  if(cin.bad())

  throw runtime_error("IO stream is corrupted!");

  if(cin.fail())

  {

  cerr 《 "bad data, try again." 《 endl;

  cin.clear();

  cin.ignore(numeric_limits<streamsize>::max(), '\n');

  continue;

  }

  }

  }

  几个地方

  1. 逗号表达式

  首先计算每一个操作数,然后返回最右边的操作数最为整个操作的结果,因此while(cin 》 ival, !cin.eof())看重的只是!cin.eof(),而对前边的cin》val不关心。

  2. 条件状态

  流状态由eof, bad, fail, good指示,如果eof, bad, fail任何一个为true那么流监测状态为错误状态;相反都为false,则good为true.

  其中badbit标志着系统级的故障,是不可回复的,如果流出现这种情况,流通常就不能继续使用了;failbit标志着是可恢复的,可以修正。eofbit在遇到文件结束符时设置,此时还设置了failbit.

  clear()和setstate()用于改变条件成员的状态。clear()将条件重设为有效状态(eof, bad, fail置为false;good置为true),setstate()把某个特定的流设为有效状态。

  3. cin

  程序的输入都建有一个缓冲区,即输入缓冲区。一次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输入缓冲区中取数据。正因为cin函数是直接从缓冲区取数据的,所以有时候当缓冲区中有残留数据时,cin函数会直接取得这些残留数据而不会请求键盘输入。

  注意

  输入结束条件:遇到Enter、Space、Tab键,会把他们读入到输入缓冲区,但是处理的时候会丢弃掉。

  cin >> val 的返回值是cin, 即左值(同样cout《val返回左值cout),这样就可以把cin 》 val1; cin 》 val2 合并为cin》val1》val2;

  4. ignore函数

  作用:提取输入字符并丢弃他们。

  函数原型:istream& ignore (streamsize n = 1, int delim = EOF)

  读取到前n个字符或在读这n个字符进程中遇到delim字符就停止,把读取的这些东西丢掉。

  案例:

  #include <iostream>

  #include <fstream>

  #include <sstream>

  #include <limits>

  #include <stdexcept>

  #include <typeinfo>

  using namespace std;

  int main()

  {

  int val1, val2;

  while(1)

  {

  cin 》 val1;

  cin.ignore(5, '9');

  cin 》 val2;

  cout 《 "val1:" 《 val1 《 endl;

  cout 《 "val2:" 《 val2 《 endl;

  }

  }

   

首页 上一页 1 2 3 4 5 下一页 尾页 1/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++基础总结 下一篇C++后缀数组练习题

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·PostgreSQL 索引 - (2025-12-25 22:20:43)
·MySQL Node.js 连接 (2025-12-25 22:20:41)
·SQL 撤销索引、表以 (2025-12-25 22:20:38)
·Linux系统简介 (2025-12-25 21:55:25)
·Linux安装MySQL过程 (2025-12-25 21:55:22)