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

测试了一下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流了。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值