您的位置:首页 > 其它

cin,cin.get()和cin.getline()的学习

2016-02-28 21:29 260 查看
测试了一下cin,cin.get(),cin.getline(),在这里把理解的记一下:

cin

最常用的输入,

读入结束条件:遇到Space 、Tab、 Enter

对结束符的处理 :忽略但并不会丢弃缓冲区中使得输入结束的结束符(Enter、Space、Tab)

例如:

int a,b;

cin>>a>>b;

cout<<a<<endl;

cout<<b<<endl;

输入:1(空格)2(回车)

输出:1

2

cin并不会丢弃缓冲区中使得输入结束的结束符

#include<iostream>

#include<string>

using namespace std;

int main(){

int a;

string str;

cin>>a;

getline(cin,str);

cout<<a<<endl;

cout<<str<<endl;

return 0;

}

输入2Enter

输出2

第二行是输出了str,我们并看不见,这是因为cin读入了2并赋值给了a,但是并没有将Enter丢弃,Enter依然在缓冲区中,所以getline遇到Enter就认为结束了,所以,读取了一个空字符串赋值给了str,所以输出str只是输出了一个空字符串。

当第一次输入非法时,比如输入:a(空格)2(回车)

输出为:2130567168

4246608

我也不知道上面的输出是什么,总之,输入非法时会出错;

cin.get()

1、可以读取单个字符,比如:

char ch;

cin.get(ch);//等同于ch=cin.get();

可以输入一个字符赋值给ch;

2、可以读取整行输入,包括Space和Tab键,

输入结束条件:遇到Enter键

对结束符的处理:不处理

比如

char ch[5];

cin.get(ch,5,'a');

cout<<ch<<endl;

输入一行字符串(可包含Space键和Tab键)以Enter键结束,程序将截取前4个字符或字符‘a’之前的字符赋值给ch数组,ch[4]或其他数组元素将自动赋值为'\0';

char a,b;

cin.get(a);

cin.get(b);

cout<<a<<endl;

cout<<(int)b<<endl;

输入:a(回车)

输出:a

10//回车键的ASCII码,表明结束符依然存在缓冲区中

cin.getline()

cin.getline() 与 cin.get(array_name, Arsize)的读取方式差不多,以Enter结束,可以接受Space和Tab字符。按照长度(Arsize)读取字符, 会丢弃最后的Enter字符,但是如果输入长度超过array_name,就会认为是个非法的操作,程序会把cin流阻断,
就是在iostream 标志条上的 fail位设置为1,这样流就不能用了,所以你后面用的cin的语句无效。通过使用cin的成员函数 cin.clear() 可以清除fail位上的1为0,这样又可以使用cin流了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: