cincingetcingetline的比较不同.docx
- 文档编号:9193193
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:15
- 大小:21.01KB
cincingetcingetline的比较不同.docx
《cincingetcingetline的比较不同.docx》由会员分享,可在线阅读,更多相关《cincingetcingetline的比较不同.docx(15页珍藏版)》请在冰豆网上搜索。
cincingetcingetline的比较不同
cin<<,cin.get,cin.getline等函数深入分析
很多初学者都认为cin函数是一个很简单的函数,其实不然!
cin函数有很多需要了解的知识(比如:
cin的返回值是什么,cin提供了哪些成员函数且分别是什么作用,如cin.clear(),cin.ignore(),cin.fail(),cin.good()等等),如果没有很好的掌握,在使用的时候很可能会出问题却不知其原因!
而且很多人也确确实实遇到过不少问题,以下是几个简单的例子:
程序1:
#include
usingnamespacestd;
intmain()
{
intm,n;
cin>>m;
cin>>n;
return0;
}
测试情况:
如果用户每次都输入两个合法的数,程序不会出问题!
但是如果用户第一次输入时给一个非法的输入,比如说输入一个字符'a',你会发现程序不会再执行第二条输入语句。
似乎有点奇怪!
!
程序2:
#include
usingnamespacestd;
intmain()
{
charstr[8];
cin.getline(str,5);
cout< cin.getline(str,5); cout< return0; } 程序的功能很简单,就是输入一个字符串再输出,再次输入一个字符串输出。 程序执行情况: 测试一: abcd(回车) abcd(输出) efgh(回车) efgh(输出) 当用户第一次输入的字符串字符数小于4时,程序执行正常! 测试二: abcdefgh(回车) abcd(输出) (输出-换行) 当用户第一次输入的字符数字符数大于4时,第一个字符串接受输入的前四个字符,而第二次的输入操作没有执行,第二个字符串输出为空。 似乎也很奇怪! ! ! 其实在很多时候都会遇到诸如此类的问题,如果不熟悉程序输入的原理和cin等一些函数的原理就不知道怎么解决! 我在这里做一个简单的介绍,也许介绍得不是很准确和全面,或者存在一些误解,请大家包涵! 输入操作的原理 程序的输入都建有一个缓冲区,即输入缓冲区。 一次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输入缓冲区中取数据。 正因为cin函数是直接从缓冲区取数据的,所以有时候当缓冲区中有残留数据时,cin函数会直接取得这些残留数据而不会请求键盘输入,这就是例子中为什么会出现输入语句失效的原因! cin的一些输入函数和操作符 cinisaexternistreamobject。 提供了很多可用的成员函数和重载的操作符,如: cin<<,cin.get(),cin.getline()等。 下面我们来了解一下这几个函数: 一.cin<< 该操作符是根据后面变量的类型读取数据。 输入结束条件 : 遇到Enter、Space、Tab键。 (这个很重要! ) 对结束符的处理: 丢弃缓冲区中使得输入结束的结束符(Enter、Space、Tab) 读字符的情况: 程序3: #include usingnamespacestd; intmain() { charc1,c2; cin>>c1; cin>>c2; cout< return0; } 测试一输入: a[Enter] b[Enter] 输出: ab 测试二输入: ab[Enter] 输出: ab 读字符串的情况: 程序4: #include usingnamespacestd; intmain() { charstr1[10],str2[10]; cin>>str1; cin>>str2; cout< cout< return0; } 测试一输入: abcd[Enter] efgh[Enter] 输出: abcd efgh 【分析】输入遇到回车符结束,很正常。 测试二输入: abcdefgh 输出: abcd efgh 【分析】第一次读取字符串时遇到空格则停止了,将abcd读入str1,并舍弃了空格,将后面的字符串给了第二个字符串。 这证明了cin读入数据遇到空格结束;并且丢弃空格符;缓冲区有残留数据室,读入操作直接从缓冲区中取数据。 二.cin.get() 该函数有三种格式: 无参,一参数,二参数 即cin.get(),cin.get(charch),cin.get(array_name,Arsize) 读取字符的情况: 输入结束条件: Enter而且会读入SPACE和TABLE键 对结束符处理: 不丢弃缓冲区中的Enter cin.get()与cin.get(charch)用于读取字符,他们的使用是相似的, 即: ch=cin.get()与cin.get(ch)是等价的。 程序5: #include usingnamespacestd; intmain() { charc1,c2; cin.get(c1); cin.get(c2); cout< cout<<(int)c1<<""<<(int)c2< return0; } 测试一输入: a[Enter] 输出: a 9710 【分析】会发现只执行了一次从键盘输入,显然第一个字符变量取的'a',第二个变量取的是Enter(ASCII值为10),这是因为该函数不丢弃上次输入结束时的Enter字符,所以第一次输入结束时缓冲区中残留的是上次输入结束时的Enter字符! 测试二输入: ab[Enter] 输出: a 9732 【分析】显然第一个字符变量取的'a',第二个变量取的是Space(ASCII值为32)。 原因同上,没有丢弃Space字符。 读取字符串的情况: cin.get(array_name,Arsize)是用来读取字符串的,可以接受空格字符,遇到Enter结束输入,按照长度(Arsize)读取字符,会丢弃最后的Enter字符。 程序6: #include usingnamespacestd; intmain() { chara[20]; cin.get(a,10); cout< return0; } 测试一输入: abcdef[Enter] 输出: abcdef 【分析】说明该函数输入字符串时可以接受空格。 测试二输入: 1234567890[Enter] 输出: 123456789 【分析】输入超长,则按需要的长度取数据。 程序7: #include usingnamespacestd; intmain() { charch,a[20]; cin.get(a,5); //cin>>ch;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- cincingetcingetline 比较 不同