C++的iostream标准库介绍以及对左移与右移运算符的重载2

2016-02-19 12:19 6 1 收藏

下面图老师小编跟大家分享C++的iostream标准库介绍以及对左移与右移运算符的重载2,一起来学习下过程究竟如何进行吧!喜欢就赶紧收藏起来哦~

【 tulaoshi.com - 编程语言 】

接下来我们来学习一下输入/输出的状态标志的相关知识,C++中负责的输入/输出的系统包括了关于每一个输入/输出操作的结果的记录信息。这些当前的状态信息被包含在io_state类型的对象中。io_state是一个枚举类型(就像open_mode一样),以下便是它包含的值。

goodbit 无错误

Eofbit 已到达文件尾

failbit 非致命的输入/输出错误,可挽回

badbit 致命的输入/输出错误,无法挽回


  有两种方法可以获得输入/输出的状态信息。一种方法是通过调用rdstate()函数,它将返回当前状态的错误标记。例如,假如没有任何错误,则rdstate()会返回goodbit.

下例示例,表示出了rdstate()的用法:

 C++ 代码
//程序作者:管宁
//站点:www.cndev-lab.com
//所有稿件均有版权,如要转载,请务必著名出处和作者

#include iostream
using namespace std;

int main()
{
int a;
cina;
coutcin.rdstate() if(cin.rdstate() == ios::goodbit)
{
cout"输入数据的类型正确,无错误!" }
if(cin.rdstate() == ios_base::failbit)
{
cout"输入数据类型错误,非致命错误,可清除输入缓冲区挽回!" }
system("pause");
}



另一种方法则是使用下面任何一个函数来检测相应的输入/输出状态:

bool bad();

bool eof();

bool fail();

bool good();

下例示例,表示出了上面各成员函数的用法:

 C++ 代码 //程序作者:管宁
//站点:www.cndev-lab.com
//所有稿件均有版权,如要转载,请务必著名出处和作者

#include iostream
using namespace std;

int main()
{
int a;
cina;
coutcin.rdstate() if(cin.good())
{
cout"输入数据的类型正确,无错误!" }
if(cin.fail())
{
cout"输入数据类型错误,非致命错误,可清除输入缓冲区挽回!" }

 如果错误发生,那么流状态既被标记为错误,你必须清除这些错误状态,以使你的程序能正确适当地继续运行。要清除错误状态,需使用clear()函数。此函数带一个参数,它是你将要设为当前状态的标志值。,只要将ios::goodbit作为实参。

示例代码如下:

 C++ 代码
//程序作者:管宁
//站点:www.cndev-lab.com
//所有稿件均有版权,如要转载,请务必著名出处和作者

#include iostream
using namespace std;

int main()
{
int a;
cina;
coutcin.rdstate() cin.clear(ios::goodbit);
coutcin.rdstate() system("pause");
}



  通常当我们发现输入有错又需要改正的时候,使用clear()更改标记为正确后,同时也需要使用get()成员函数清除输入缓冲区,以达到重复输入的目的。

示例代码如下:
 C++ 代码 //程序作者:管宁
//站点:www.cndev-lab.com
//所有稿件均有版权,如要转载,请务必著名出处和作者
#include iostream
using namespace std;

int main()
{
int a;
while(1)
{
cina;
if(!cin)//条件可改写为cin.fail()
{
cout"输入有错!请重新输入" cin.clear();
cin.get();
}
else
{
cout break;
}
}
system("pause");
}


最后再给出一个对文件流错误标记处理的例子,巩固学习,代码如下:

 C++ 代码 //程序作者:管宁
//站点:www.cndev-lab.com
//所有稿件均有版权,如要转载,请务必著名出处和作者
#include iostream
#include fstream
using namespace std;

int main()
{
ifstream myfile("c:1.txt",ios_base::in,0);
if(myfile.fail())
{
cout"文件读取失败或指定文件不存在!" }
else
{
char ch;
while(myfile.get(ch))
{
cout }
if(myfile.eof())
{
cout"文件内容已经全部读完" }
while(myfile.get(ch))
{
cout }
}
system("pause");

来源:http://www.tulaoshi.com/n/20160219/1600574.html

延伸阅读
标签: Web开发
JavaScript中右移赋值运算符 (=) 是变量值右移表达式值所规定的位数,保持符号不变,并将结果赋给该变量。使用方式: result = expression 其中result是任何变量。 expression是任何表达式。 说明 使用 = 运算符和使用下面的语句是等效的: result = result expression = 运算符把 result 的所有位向右移 expression 指定的位数。result ...
算符重载的作用是什么?它允许你为类的用户提供一个直觉的接口。 算符重载允许C/C++的运算符在用户定义类型(类)上拥有一个用户定义的意义。重载的算符是函数调用的语法修饰: class Fred { public: // }; #if 0 // 没有算符重载: Fred add(Fred, Fred); Fred mul(Fred, Fred); Fred f(Fred a, F...
标签: Web开发
无符号右移运算符 ()是右移表达式的位,不保留符号。使用示例 result = expression1 expression2 其中result是任何变量。 expression1是任何表达式。 expression2是任何表达式。 JavaScript中无符号右移运算符说明 运算符把 expression1 的各个位向右移 expression2 指定的位数。右移后左边空出的位用零来填充。移出右边的位被丢弃。例如...
标签: Web开发
JavaScript中按位右移运算符()是右移表达式的位,保持符号不变。使用方法: result = expression1 expression2 其中result是任何变量。 expression1是任何表达式。 expression2是任何表达式。 说明 运算符把 expression1 的所有位向右移 expression2 指定的位数。expression1 的符号位被用来填充右移后左边空出来的位。向右移出的位被丢弃...
最高 ! ++ -- * / % + - = is== !=&^|&&(短路与)|| (短路或)?:最低