对C++ STL iostram 中 cin.get(char* cs,int size,char c='/n') 的理解-阿里云开发者社区

开发者社区> 大熊猫侯佩> 正文

对C++ STL iostram 中 cin.get(char* cs,int size,char c='/n') 的理解

简介:
+关注继续查看

其中 cs 是指向 char buf, sizebuf的长度,

c是终止字符(default=='/n')

 

void main()
{

 const int size = 16;

 char cs[size];

 while(cin.get(cs,size))
 {
  int i=cin.gcount();
  cout<<i<<": "<<cs<<endl;

  cin.ignore();
 }

我猜测 cin.get()是这样的运行步骤:

0     cin.get()试图从OS管理的输入缓冲(在用户敲键盘时触发对应

      中断,然后由中断处理例程将按键键码转换为ascii码值,放

      OS内部缓冲里。)中取字符,如果缓冲为空则等待

用户输入,否则跳到步骤2;

1     用户按回车键后,cin.get()继续取得控制权;

2     cin.get()对输入缓冲中字符做如下处理:

a 当输入缓冲中第一个字符为终止字符或到达文件末尾时

cin.get()退出并返回false;

b 否则,cin.get()依次将输入缓冲的字符move(注意不是copy)

cs,直到遇到一下3种情况之一 :到达文件末尾、已

move的字符数等于size-1、输入缓冲的字符是终止字符。

这时,cin.get()’/0’字符插入cs末尾。如果这时输入缓冲

还有字符,则这些字符被保留。(上面的第3种情况里终止

字符也被保留在输入缓冲中而不被取出。);

       c cin.get()退出并返回true.

3 这时执行while block 中的代码,其中使用cin.ignore()将输入

       缓冲里第一个字符---即终止字符删除。(原因如下。)

4 while 再次调用 get.line() 从而回到步骤 0 。这时如果没有

    上面的cin.ignore(),由于输入缓冲里第一个字符就是终止字符,

所以就会退出while

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
ECLIPSE明明能跳到头文件,却提示Unresolved Inclusion,怎么办?
ECLIPSE明明能跳到头文件,却提示Unresolved Inclusion,怎么办?
3 0
使用C++模板判断两个类型是否一样
使用C++模板判断两个类型是否一样
4 0
使用C++模板判断是否基本类型
使用C++模板判断是否基本类型
6 0
淘系技术飞冰团队正式发布 icejs 2.0 版本
icejs 是一个基于 React 的渐进式研发框架,由淘系前端飞冰(ICE)团队于 2020.02 发布 1.0 版本
3 0
Eclipse/NSight: methond could not resolved
Eclipse/NSight: methond could not resolved
3 0
C++模板实现,支持多维,安全数组的完整代码
C++模板实现,支持多维,安全数组的完整代码
5 0
MySQL8.0实战(二) - 数据库设计(下)
MySQL8.0实战(二) - 数据库设计(下)
3 0
C++中,类如果包含map/list等对象,慎用memset(0)
C++中,类如果包含map/list等对象,慎用memset(0)
3 0
C++类中在构造器中调用本类的另外构造器
C++类中在构造器中调用本类的另外构造器
4 0
模板(范型)的安全数组C++代码
模板(范型)的安全数组C++代码
4 0
+关注
大熊猫侯佩
贪吃贪睡的大熊猫侯佩
689
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载