C++ 的cin输入注意【转】----cin的状态

来源:互联网 发布:数据库管理软件做什么 编辑:程序博客网 时间:2024/05/29 06:28

C++ 的cin输入注意【转】

我们定义要输入到的变量是整型,但如果我们输入了英文字母或者汉字,那就会发生错误,不能继续输入或操作。
你可以在程序中添加如下程序,来清空cin的输入缓冲区重新输入
if(!cin)           
{
cout<<"输入有错!请重新输入"<<endl;
cin.clear();
cin.sync();   //清空流
}

cin.sync(); 这个是用来清空cin缓冲区里面未读取的信息...

 

例如:

#include <iostream>
using namespace std;
void main()
{
    int n;
    cout<<"请输入数字:";
    while(!(cin>>n))
    {
        cin.sync();//清除缓冲区
        cin.clear();//清除错误状态,在这个程序里,两个必须一起用,否则 达不到效果
        cout<<"您只能输入数字,请重新输入:";
    }
}


1、每一个输入(输出)对象就代表一个输入(输出)流
2、输入(输出)对象中的流状态成员标记了输入(输出)流当前的状况,当eofbit、badbit、failbit三个标记位均为0时表示流状态正常
3、一但某个或几个标记位被设置,表示对象的流状态出现相应状况,流将对后面的输入(输出)关闭,直到标记位被清除
4、只有在流状态良好的情况下,if或者while对该输入(输出)对象的判断才能是true

cin.clear(); //清除cin流的错误状态

C++语句cin.clear();中的clear()是什么函数,原型是?
 
答:检举将一个出错的流的状态恢复为“好”。但也不完全是,因为它也可以把“好”的流变成“坏”。

其默认参数为:
ios::goodbit

故语句:
cin.clear()

清除cin流,并设置goodbit状态位。

同理,语句:
cin.clear(ios::failbit)

清除cin流,并设置failbit状态位,该位代表一般可修复的小错误,自然还可以设置其他几个状态位,但普通情况下,很少用到。还是以goodbit位用的最多。由于它是默认参数,所以不需显示传递,故而你最常看到的就是:
cin.clear()   这句了。

cin状态【转】

1cin状态有下面几种:

常量

含义

failbit标记位的值

eofbit标记位的值

badbit标记位的值

转化为10进制

ios::failbit

输入(输出)流出现非致命错误,可挽回

1

0

0

4

ios::badbit

输入(输出)流出现致命错误,不可挽回

0

0

1

2

ios::eofbit

已经到达文件尾

0

1

0

1

ios::goodbit

流状态完全正常

0

0

0

0


分别对应cin.fail(),cin.bad(),cin.eof(),cin.good()

2、了解几种cin与状态有关的函数

(1)cin.sync()    清除缓冲区

(2)cin.clear()    清除cin错误状态
cin.clear()用法如果输入发生错误发生,那么流状态既被标记为错误,你 必须清除这些错误状态,以使你的程序能正确适当地继续运行。要清除错误状态,需使用clear()函数。

(3)cin.ignore(int n,char c) 
cin.ignore( 5,  'c'  )   的是从输入流(cin)中提取字符,提取的字符被忽略(ignore),不被使用。每抛弃一个字符,它都要计数和比较字符:如果计数值达到5或者被抛弃的字符是'c',则cin.ignore()   函数执行终止;否则,它继续等待。 它的一个常用功能就是用来清除以回车结束的输入缓冲区的内容,消除上一次输入对下一次输入的影响。

 

比如可以这么用:cin.ignore( 1024,  '\n' );,通常把第一个参数设置得足够大,这样实际上总是只有第二个参数  '\n'   起作用,所以这一句就是把回车(包括回车)之前的所以字符从输入缓冲(流)中清除出去。




 


原创粉丝点击