参考地址:http://www.cnblogs.com/A-Song/archive/2012/01/29/2331204.html

程序的输入都建有一个缓冲区,即输入缓冲区。一次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输入缓冲区中取数据。正因为cin函数是直接从缓冲区取数据的,所以有时候当缓冲区中有残留数据时,cin函数会直接取得这些残留数据而不会请求键盘输入

#1:

#include

using namespace std;

int main()

{

char str[8];

cin.getline(str, 5);

cout<

cin.getline(str, 5);

cout<

return 0;

}

测试:

abcdefgh (回车)

abcd (输出)

(输出-换行)

【分析】之所以第一次输入完后直接程序就结束了,而不是进行第二次输入,是因为第一次多输入的数据还残留在缓存区中,第二次输入就直接从缓存区中提取而不会请求键盘输入,以下探讨几种常见的输入方式:

一. cin>>

该操作符是根据后面变量的类型读取数据。

输入结束条件 :遇到Enter、Space、Tab键。

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

#2:

#include

using namespace std;

int main()

{

char str1[10], str2[10];

cin>>str1;

cin>>str2;

cout<

cout<

return 0;

}

测试:

abcd efgh

输出:

abcd

efgh

【分析】第一次读取字符串时遇到空格则停止了,将abcd读入str1,并舍弃了空格,将后面的字符串给了第二个字符串。这证明了cin读入数据遇到空格结束;并且丢弃空格符;缓冲区有残留数据,读入操作直接从缓冲区中取数据。

二.cin.get(数组名,长度,结束符)

其中结束符为可选参数,读入的字符个数最多为(长度-1)个,结束符规定结束字符串读取的字符,默认为ENTER

若要读取字符,直接cin.get(char ch)或ch=cin.get()即可

读取字符的情况:

输入结束条件:Enter键

对结束符处理:不丢弃缓冲区中的Enter

cin.get() 与 cin.get(char ch)用于读取字符,他们的使用是相似的,

即:ch=cin.get() 与 cin.get(ch)是等价的。

#3:

#include

using namespace std;

int main()

{

char c1, c2;

cin.get(c1);

cin.get(c2);

cout<

cout<

return 0;

}

测试一输入:

a[Enter]

输出:

a

97 10

【分析】会发现只执行了一次从键盘输入,显然第一个字符变量取的’a', 第二个变量取的是Enter(ASCII值为10),这是因为该函数不丢弃上次输入结束时的Enter字符,所以第一次输入结束时缓冲区中残留的是上次输入结束时的Enter字符!

测试二输入:

a b[Enter]

输出:

a

97 32

【分析】显然第一个字符变量取的’a', 第二个变量取的是Space(ASCII值为32)。原因同上,没有丢弃Space字符。

读取字符串的情况:

输入结束条件:默认Enter键(因此可接受空格,Tab键),可在第三个参数上自定义结束符

对结束符处理:丢弃缓冲区中的Enter

#4:

#include

using namespace std;

int main ()

{

char ch, a[20];

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

cin>>ch;

cout<

cout<

return 0;

}

测试一输入:

12345[Enter]

输出:

1234

53

【分析】第一次输入超长,字符串按长度取了"1234",而’5′仍残留在缓冲区中,所以第二次输入字符没有从键盘读入,而是直接取了’5′,所以打印的ASCII值是53(’5′的ASCII值)。

测试二输入:

12d45[Enter]

输出:

12

d

【分析】第二次输出为d,说明自定义结束符时不丢弃缓冲区中的结束符

三.cin.getline()

cin.getline(数组名,长度,结束符) 大体与 cin.get(数组名,长度,结束符)类似。

区别在于:

cin.get()当输入的字符串超长时,不会引起cin函数的错误,后面的cin操作会继续执行,只是直接从缓冲区中取数据。但是cin.getline()当输入超长时,会引起cin函数的错误,后面的cin操作将不再执行。

#5:

#include

using namespace std;

int main ()

{

char ch, a[20];

cin.getline(a, 5);

cin>>ch;

cout<

cin c语言中文网,c++ cin详解相关推荐

  1. C语言return的用法详解,C语言函数返回值详解。 (本次转载仅供学习,感谢原创!!转发自C语言中文网,如有侵权请私信本人删除)

    C语言return的用法详解,C语言函数返回值详解 转载:http://c.biancheng.net/view/1855.html 函数的返回值是指函数被调用之后,执行函数体中的代码所得到的结果,这 ...

  2. 嵌入式c语言为什么变量定义在前面,嵌入式C语言数据类型和变量详解

    原标题:嵌入式C语言数据类型和变量详解 一般来讲,标准的C语言类型在嵌入式编译器中是合法的.但由于嵌入式控制器的受限环境.嵌入式c语言的变量和数据类型具有新的特征,这些特征体现在如下方面. 嵌入式C语 ...

  3. 用数据结构c语言写成绩排序,C语言数据结构 快速排序实例详解

    C语言数据结构 快速排序实例详解 一.快速排序简介 快速排序采用分治的思想,第一趟先将一串数字分为两部分,第一部分的数值都比第二部分要小,然后按照这种方法,依次对两边的数据进行排序. 二.代码实现 # ...

  4. C语言解决约瑟夫问题详解的代码

    C语言解决约瑟夫问题详解的代码 参考文章: (1)C语言解决约瑟夫问题详解的代码 (2)https://www.cnblogs.com/odsxe/p/10791049.html (3)https:/ ...

  5. c语言中快排函数,c语言快排函数详解

    c语言快排函数详解 int cmp(const void *a, const void *b) 返回正数就是说 cmp 传入参数第一个要放在第二个后面, 负数就是传入参数第一个要放第二个前面, 如果是 ...

  6. c语言printf函数中的格式控制字符串,C++_C语言格式化输入输出函数详解,一:格式输出函数printf() 1 - phpStudy...

    C语言格式化输入输出函数详解 一:格式输出函数printf() 1.调用形式一般为:printf("格式化控制字符串",输出表列): 2.格式化控制字符串用于指定输出格式,它有三种 ...

  7. C语言:JSON格式详解

    C语言:JSON格式详解 C语言:cJSON库用法详解 C语言:使用cJSON库构造JSON C语言:使用cJSON库解析JSON字符串 JSON 简介 JSON全称 JavaScript Objec ...

  8. c语言 is函数,关于C语言回调函数的详解~

    原标题:关于C语言回调函数的详解~ 01 什么是回调函数? 回调函数,光听名字就比普通函数要高大上一些,那到底什么是回调函数呢?恕我读得书少,没有在那本书上看到关于回调函数的定义.我在百度上搜了一下, ...

  9. java文档注释定界符_c语言的注释定界符详解

    c语言的注释定界符详解 c语言的注释定界符是什么 1.最早期的C语言注释是:/* */ 2.后来又增加的行注释:// 其中/**/是多行注释,//是单行注释. 需要注意的是:C 语言的注释并不是可以出 ...

最新文章

  1. 中文详解phpmailer所有对象和属性
  2. Linux终端的几个常用快捷方式,记下!
  3. codeforces MUH and Cube Walls
  4. UVA12412 A Typical Homework (a.k.a Shi Xiong Bang Bang Mang)
  5. 【Linux学习笔记】用nc实现两台主机间的文件传输(不需要输密码)
  6. 【洛谷p1464】 Function
  7. php 检查数据库查询结果,php数据库连接、查询、显示结果的小例子
  8. 【渝粤教育】广东开放大学 计算机组成原理 形成性考核 (21)
  9. 51job导出的简历是php,前程无忧简历导出
  10. boost format使用详解
  11. 使用Docker安装Redis并设置自启动
  12. 虚拟机ping通主机步骤_6在购买虚拟主机服务之前,请按照操作步骤进行操作
  13. 模拟器和平精英连接服务器没有响应,和平精英模拟器卡顿解决方法一览
  14. linksys 打印软件_Linksys固件DD-WRT BitTorrent优化
  15. linux清理命令及常用命令
  16. #深入分析# pandas中使用 drop 和 del删除列数据的区别
  17. 为什么互联网巨头热衷“年终盘点”?
  18. 人工智能有哪些好书值得推荐?
  19. 最新java开发工具_2019 最新 Java 开发工具教程,都在这了
  20. 魔兽怀旧服服务器怎么修改,《魔兽世界怀旧服》转服功能怎么用 转服功能使用方法教程...

热门文章

  1. 基于IPFS的视频存储、传输 (闲聊,欢迎加入)
  2. 2019 NCTF Re WP
  3. python中字符串的两种序号体系_Python字符串 --Python3
  4. Vivado使用心得(三)FANOUT解决办法
  5. 数据库死锁的检查和解决方法
  6. 最美好的事,是看到某人的微笑;更美好的事,是TA因你而微笑
  7. 品优购项目代码学习第三天
  8. mysql日期格式化 yyyymmdd_mysql中格式化日期详解
  9. frp客户端(frpc) 安装及使用
  10. 单目激光三维重建的标定方法