C++:cin、cin.get()、cin.getline()、getchar()、getline()总结

一、cin

cin从输入缓冲区中读取数据,遇到结束符(Tab、Space、Enter)时输入结束,并且结束时结束符并不会丢弃,而是保留在输入缓冲区中。cin开始读取数据时遇到结束符时会直接忽略,也就是当输入缓冲区第一个数据为结束符时,cin会忽略并丢弃结束符。

注意:当cin或者cin.get()与getline()同时出现时,需要注意缓冲区中的结束符。

char ch1;
cin >> ch1;
cout << (int)ch1 << endl;
char ch2 = cin.get();
cout << (int)ch2 << endl;

当输入1+Enter时,输出49和10(1对应的ASCII码为49,\n对应的ASCII码为10),说明结束符保留在缓冲区内;

当输入Space+1+Enter时,输出同上,说明读取时忽略了结束符;

二、cin.get()

cin.get()从输入缓冲区中读取一个字符,对于缓冲区的Space、Tab、Enter不敏感,可以读取这些符号。

三、cin.get(数组,长度,结束符)

cin.get(数组,长度,结束符)从缓冲区中读取出(长度-1)的字符串或者遇到结束符时结束读取数据(结束符保留在缓冲区内),不定义第三个参数时,结束符默认为\n;

char ch1, str[5];
cin.get(str, 4,'a' );
cout << str << endl;
cin >> ch1;
cout << ch1 << endl;

当输入12345+Enter时,输出123和4,说明该函数读取的(长度-1)个字符,第一次读取了123,而4和5仍保留在缓冲区内;

当输入1a345+Enter时,输出1和a,说明当遇到结束符时,读取结束并且结束符保留在缓冲区内;

四、cin.getline(数组, 长度, 结束符)

cin.getline(数组, 长度, 结束符)从缓冲区中读取出(长度-1)的字符串或者遇到结束符时结束读取数据(结束符不会保留在缓冲区内),不定义第三个参数时,结束符默认为\n;

但是输入的字符串超过长度长时,会引起cin函数的错误,后面的cin出错;而cin.get(数组, 长度, 结束符)函数不会引起错误,后面的cin操作会继续从缓冲区中读取数据,不会引起异常;

char ch1, str[10];
cin.getline(str, 5);
cout << str << endl;
ch1 = cin.get();
cout << (int)ch1 << endl;

当输入12345+Enter时,输出1234和-1,说明读取读取了(长度-1)个字符,并且后面读取异常;

当输入1234+Enter时,输出12和4,说明读取到结束符时停止,并且将结束符从缓冲区中丢弃;

char ch1, str[10];
cin.getline(str, 5, 'a');
cout << str << endl;
ch1 = cin.get();
cout << (int)ch1 << endl;

当输入1234a+Enter时,输出1234和10,说明结束符a被丢弃,10为\n的ASCII码;

当输入12345+Enter时,输出1234和-1,说明读取读取了(长度-1)个字符,并且后面读取异常;

五、getchar()

getchar()从缓冲区中读取一个字符,对于缓冲区的Tab、Space、Enter等符号不敏感,类似于不接受参数的cin.get()函数;

六、getline()

istream& getline (istream&  is, string& str, char delim);
istream& getline (istream&& is, string& str, char delim);
istream& getline (istream&  is, string& str);
istream& getline (istream&& is, string& str);

getline()从流中读取一个字符串,可以自定义读取结束符,默认结束符为换行符,读取结束时,结束符不保留在缓冲区内;

char ch1;
string str;
getline(cin, str);
cout << str << endl;
ch1 = cin.get();
cout << (int)ch1 << endl;

当输入123456+Enter+1时,输出123456和49,结束符没有保留在缓冲区;

char ch1;
string str;
getline(cin, str,'a');
cout << str << endl;
ch1 = cin.get();
cout << (int)ch1 << endl;

当输入123a123+Enter时,输出123和49。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值