- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
cin(隶属于istream)是供使用者输入用的标准输入通道,对应于C的stdin。操作系统通常将它和键盘连接,用来接受用户从键盘输入进来的数据。下图描述了cin是如何从键盘获取用户数据的过程:
来自键盘的输入首先会被送到”输入缓冲区“(streambuf),接受变量然后再从”输入缓冲区“中获取数据。
“输入缓冲区” 通过以下代码获取:
?streambuf* inputBuf = cin.rdbuf();
可以使用 ? ? get() ? getline()??三种方式获取用户的输入信息。
?
说明:\t -- 制表符 ? ? -- 空格 ? \n -- 回车
?
cin的一些特点:
(1) ?cin可以通过 空格、制表符、回车 来界定字符串,也可以自定义界定字符。
(2)cin在某些情况下会失效(即:无法再通过cin获取用户输入到指定的接受变量中,调用cin中的”“、”get“、”getline“函数时,程序不会再挂起等待用户输入)。
(3)”“ ?使用 空格、制表符、回车?来界定字符窜。
?? ? ? ”get“ ?/ ”getline“ ?默认使用 ?回车 来界定字符窜(用于读取一行数据),也可自定义界定字符。?
?
具体细节见后文分析:
?
【】
int x;
cin x;
1. 当键入:” ? ? ? 56“,并回车结束输入,x将被赋值为56,且此时”输入缓冲区“中还会残留一个”\n“。
2. 当键入:” ? ?\t\t32 ? \t ?“,并回车结束输入,x将被赋值为32,且此时”输入缓冲区“中残留”?? \t ?\n“。
3. 当键入:”32 ? 56 ?78“,并回车结束输入,x将被赋值为32,且此时”输入缓冲区“中残留” ? 56 ?78\n“。
?
【int get() / istream get(char c)】 /*永远都不会失效*/
如果“输入缓冲区”中有数据,就取出“输入缓冲区”的第一个字节,并返回该字节,且从“输入缓冲区”中删除该字节。
--如:当”输入缓冲区“为空,这程序会挂起,等待用户输入。
--如:当”输入缓冲区“为”\n“
int get()返回‘\n的ASCII码值
istream get(char c) 返回当前cin对象,c=’\n。
然后从“输入缓冲区”中删除‘\n’字符,则当前缓冲区变为空。
--如:当”输入缓冲区“为”\ts ?56\t\n“
int get()返回‘\t的ASCII码值
istream get(char c) 返回当前cin对象,c=’\t。
然后从“输入缓冲区”中删除‘\t’字符,则当前缓冲区变为“s ?56\t\n”。
?
【istream get(char* s, int n) / istream get(char* s, int n, char delim)】
istream get(char* s, int n) ? 以回车来界定字符窜。
istream get(char* s, int n, char delim) ?通过char delim 来指定界定字符。
这两个函数均会从“输入缓冲区”中获取n-1个字符,而s[n-1]不会被用来接收数据,会被恒置为\0。
/* ?以istream get(char* s, int n) 举例??*/
1. 如果输入缓冲区中的字符数为m(不包括最后一个的\n回车符),少于n-1个字符,则余下用\0来填充。
--如:当前的缓冲区为“\tab23\n”,执行get(chs, 10);执行完后,chs = \tab23\0\0\0\0\0,缓冲区变为:“\n”,cin输入流的状态为有效。
2. 如果输入缓冲区中的字符数为0(不包括最后一个的\n回车符)。
--如:当前的缓冲区为“\n”,执行get(chs, 3);执行完后,chs=\0,缓冲区变为:“\n”,cin输入流的状态变为失效。
3. 如果输入缓冲区中的字符数为m(不包括最后一个的\n回车符),等于n-1个字符。
--如:当前的缓冲区为“sdrgh23\n”,执行get(chs, 8);执行完后,s = sdrgh23\0,缓冲区变为:“\n”,cin输入流的状态为有效。
4. 如果输入缓冲区中的字符数为m(不包括最后一个的\n回车符),大于n-1个字符。
--如:当前的缓冲区为“c ghy4nm\n”,执行get(chs, 5);执行完后,s = c gh\0,缓冲区变为:“y4nm\n”,cin输入流的状态为有效。
?
【istream getline(char* s, int n) / istream getline(char* s, int n, char delim)】
istream getline(char* s, int n) ?
文档评论(0)