cin:遇到空格,回车或者制表符就会结束输入,这样就导致了我们不能输入一个带有空格的字符串。

cin.get(),cin.getline() :但是,很好,C++的这两个函数帮我们解决了这一问题,它们都表示每次读取一行字符串输入。

不过,这两个函数也有一些区别:

cin.getline()和cin.get()。这两个函数都读取一行输入,直到达到换行符。然而,随后cin.getline()将丢弃换行符,而cin.get()将换行符保留在输入序列中。

1.面向行的输入:getline()

MSDN中的用法:

istream::getline

istream& getline( char* pch, int nCount, chardelim= '\n' );

istream& getline( unsigned char* puch, int nCount, char delim = '\n' );

istream& getline( signed char* psch, int nCount, char delim = '\n' );

getline()函数读取整行,它使用通过回车键输入的换行符来确定输入结尾。要调用这种方法,可以使用cin.getline()。该函数有两个参数。第一个参数是用来储存输入行的数组名称,第二个参数是要读取的字符数。如果这参数为20,则函数最多读取19个字符,余下的空间用于储存自动在结尾处添加的空字符。getline()成员函数在读取指定数目的字符或者遇到换行符时停止读取。

例如,假设要使用getline()将姓名读入到一个包含20个元素的name数组中。可以使用这样的函数调用:

cin.getline(name, 20);

这将把一行读入到name数组中——如果这行包含的字符不超过19个。

/******************************************描述: cin, cin.getline(), cin.get()区别作者: Elohim
******************************************/
#include <iostream>
using namespace std;int main()
{char name[20];cin.getline(name,20);cout<<"name : "<<name<<endl;return 0;
}

getline()函数每次读取一行。它通过换行符来确定尾部,单不保存换行符。相反,在储存字符串时,它用空字符('\0')来替换换行符。

2.面向行输入:get()

MSDN中的用法:

get();  
get( char*, int, char );  
get( char& );  
get( streambuf&, char );

get()不读取并丢弃换行符,而是将其留在输入队列中。

例如,cin.get(name, 10); cin.get(blog, 10); 连续两个cin.get()。就出问题了。

由于第一次调用后,换行符将留在输入队列中,因此第二次调用时看到的第一个字符就是换行符。因此get()认为已经达到行尾,而没有发现任何读取内容。

如果不借助帮助,get()将不能跨过该换行符。

幸运的是,cin.get();不带任何参数,可以读取下一个字符(即使是换行符)。所以我们可以改成如下:

cin.get(name,10);

cin.get();

cin.get(blog,10);

这样问题就得到了解决。

/******************************************描述: cin, cin.getline(), cin.get()区别作者: Elohim
******************************************/
#include <iostream>
using namespace std;int main()
{char name[100],blog[100];cin.get(name,10);cin.get();cin.get(blog,10);cout<<"name : "<<name<<endl;cout<<"blog : "<<blog<<endl;return 0;
}

C++中cin,cin.get()和cin.getline()的区别相关推荐

  1. c++中关于字符串的读入——cin、getline、get、gtes(查询+思考+总结)

    1.cin读入一个字符: char c;cin>>c; 2.cin读入一个字符串: char s[10];cin >> s;(c风格字符串)    string str;cin ...

  2. cin、cin.get()、cin.getline()、getline()的区别

    测试平台g++ 5.4.0和VS2015社区版. 输入原理简述: 程序的输入都建有一个缓冲区,即输入缓冲区.每次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输 ...

  3. java里的nextint_「nextint」Java中关于nextInt()、next()和nextLine()的区别 - 金橙教程网...

    nextint 先看解释: nextInt(): it only reads the int value, nextInt() places the cursor in the same line a ...

  4. PHP如何进行错误与异常处理(PHP7中的异常处理和之前版本异常处理的区别)

    PHP如何进行错误与异常处理(PHP7中的异常处理和之前版本异常处理的区别) 一.总结 一句话总结: throwable接口+Error类 在PHP7更新中有一条:更多的Error变为可捕获的Exce ...

  5. 媒体查询中“屏幕”和“仅屏幕”之间有什么区别?

    本文翻译自:What is the difference between "screen" and "only screen" in media queries ...

  6. Java Persistence API中的FetchType LAZY和EAGER之间的区别?

    我是Java Persistence API和Hibernate的新手. Java Persistence API中的FetchType.LAZY和FetchType.EAGER什么区别? #1楼 我 ...

  7. js数组中forEach/some/every/map/filter/reduce的区别

    2019独角兽企业重金招聘Python工程师标准>>> // js数组中forEach/some/every/map/filter/reduce的区别// 1. foreach:就是 ...

  8. python中remove函数是什么意思,python中pop函数和remove函数有什么区别

    python中pop函数和remove函数有什么区别 发布时间:2020-12-10 09:36:18 来源:亿速云 阅读:80 作者:小新 小编给大家分享一下python中pop函数和remove函 ...

  9. 浅谈caffe中train_val.prototxt和deploy.prototxt文件的区别

    浅谈caffe中train_val.prototxt和deploy.prototxt文件的区别 标签: caffe深度学习CaffeNet 2016-11-02 16:10 1203人阅读 评论(1) ...

  10. python中模块(Module)和包(Package)的区别 (导入模块、导入包)(import导包)

    如下结构,mycompany就是包,abc.py和xyz.py就是模块 mycompany ├─ __init__.py ├─ abc.py └─ xyz.py 参考文章:Python中模块(Modu ...

最新文章

  1. 【组队学习】【32期】Linux实践
  2. MongoDB的update和set的用法
  3. 某员工在工作群回复领导“OK”,被领导批不懂规矩!直接开除!
  4. js 解析 url参数中文的情况
  5. 数据可视化,必须注意的30个小技巧!
  6. Aloy:风格化角色的设计和建模
  7. VIM使用系列:寄存器与复制粘贴缓冲区
  8. How Tomcat works — 一、怎样阅读源码
  9. 设计模式系列漫谈之一 - 观察者模式
  10. Linux下open函数、read函数、write函数记录
  11. leetcode article
  12. 日本研发投篮机器人,隔着半个球场都能百发百中,虐翻人类职业球员
  13. 认真分析mmap:what? why? how?
  14. 多线程--对象及变量的并发访问
  15. addressof表达式不能转换为long_【C语言】03-数据类型、运算符与表达式
  16. 怎么给图片加水印?四个步骤搞定
  17. 计算机中的颗粒度(granularity)什么是颗粒度?
  18. android room表关联,Android Room的用法
  19. 高精度线性恒压源设计及电路分析
  20. Python教程:命令行参数处理

热门文章

  1. 关于统计一篇很好的文章
  2. Java - Object wait() 方法之虚假唤醒spurious wakeup
  3. StarUML画流程图
  4. Golang代码注释规范及goland代码注释模板配置
  5. php 获取pdf中的图片,使用PHP从PDF中提取图像
  6. 什么是SDN?用一篇文章彻底讲明白 SDN 软件定义网络是什么!
  7. ubuntu防火墙安装arm架构说明
  8. 如何提升软件测试思维?
  9. 程序员的第一款 Hello World
  10. java.lang.NoClassDefFoundError:org.ksoap2.seri...