来源:c++ primer plus

在c++里当我们输入一个字符串时习惯用cin,但是cin只能读取一段不含空格的字符串,如果我们需要读取一段包含空格的字符串时,就需要用到getline()或get()。下面介绍getline()和get(),这两个都是读取到换行符结束。

1.getline():

假设现在我们要输入一个名字,保存在name数组里:

#include<iostream>
using namespace std;
int main()
{
  char name[10];
  cin.getline(name,10);
  cout<<name<<endl;
  return 0;
}
//第一次输入:123456    第一次输出:123456
//第二次输入:1234567890 第二次输出:123456789

调用方式是cin.getline(),里面有两个参数,分别是数组名和数组长度,在这里要注意的是如果长度是10,那么最多只会读取9个字符,因为还有一个位置要留给空字符'\0',如果只输入5个,那么剩余的都会用空字符来补满。对于getline(),它一直读取到遇到换行符或到达指定数目字符时结束,然后换行符会被丢弃,不留在输入队列里(这是接下来它和get()的细微区别)。

getline()也可以这样用:

#include<iostream>
using namespace std;
int main()
{
char name1[],name2[];
cin.getline(name1,).getline(name2,);
  //第一次调用返回一个cin对象,然后这个对象再调用getline()
cout<<name1<<' '<<name2<<endl;
return ;
}
/*输入:
123
456
输出:123 456 */

2.get():

get()和getline()很像,也是两个参数,但是get()读取到换行符停止时,换行符会留在输入队列里,下一次读取时就会再次读取到换行符,导致读取为空。

例如:

#include<iostream>
using namespace std;
int main()
{
char name1[],name2[];
cin.get(name1,);
cin.get(name2,);
cout<<name1<<' '<<name2<<endl;
return ;
}
/*输入:123
输出:123 */

在这里我是想输入123再输入456的,但是我没机会了,因为输入123时遇到换行符然后停止,第二次调用时这个换行符还在输入队列里,程序就会再次停止,后面就读取不到内容了。

当cin.get()里面没用参数时,它会吸取一个字符,包括换行符,所以我们可以这样:

#include<iostream>
using namespace std;
int main()
{
char name1[],name2[];
cin.get(name1,);
cin.get();
cin.get(name2,);
cout<<name1<<' '<<name2<<endl;
return ;
}
/*输入:
123
456
输出:
123 456
*/

也可以这样写:

#include<iostream>
using namespace std;
int main()
{
char name1[],name2[];
cin.get(name1,).get();
cin.get(name2,);
cout<<name1<<' '<<name2<<endl;
return ;
}
/*输入:
123
456
输出:
123 456
*/

空行和超出分配空间都会导致出错,应该尽量避免。

还有就是当我们在实际运用中可能要数字和字符串混合输入,这个时候容易出错,举一个书上的例子:

#include<iostream>
using namespace std;
int main()
{
int year;
char address[];
cin>>year;
cin.getline(address,);
cout<<year<<endl;
cout<<address<<endl;
return ;
}
/*
输入输出:
2018
2018 */

我们输入了年份,这个时候换行符还在输入队列里,然后调用getline()时遇到换行符,直接结束读取。。。,这里可以用cin.get()来吸收换行符。

差不多就这么多吧。

c++面向行的输入getline()和get()的更多相关文章

  1. C++面向行输入:get()与getline()

    面向行的输入:get()与getline() 引入: char a = 's';//这样的语句合法 char b = "s";//不合法 /* "S"不是字符常 ...

  2. c++ string类使用及用string类解决整行字符串输入

    下面随笔给出c++ string类使用及用string类解决整行字符串输入. string类 使用字符串类string表示字符串 string实际上是对字符数组操作的封装 string类常用的构造函数 ...

  3. JNI 在命令行窗口输入字符,不显所输入字符,显指定的掩饰符

    //JNI-命令行窗口输入字符,显掩饰符.txt /*  目标:在命令行窗口输入字符,不显所输入字符,显指定的掩饰符  作者:tangshancheng@21cn.com*/ 1.KeyBoard.j ...

  4. 在命令行中输入python会跳转到商店问题解决,python环境变量的配置

    安装python出了点问题,明明安装了,在应用商店显示已获取,可是在命令行输入python检验时就直接跳转到win10系统自带的应用商店...... 这不免让我怀疑是不是没有安装好python~但是它 ...

  5. 关于输入getline

    此函数可读取整行,包括前导和嵌入的空格,并将其存储在字符串对象中. getline 函数如下所示: getline(cin, inputLine); 其中 cin 是正在读取的输入流,而 inputL ...

  6. git 生成公钥 使用命令行无需输入用户名密码(windows)

    之前设置过一次,后来就忘记了,今天改完密码之后发现命令行clone时验证身份失败,重新设置公钥,记录一下 1. 由于之前设置过公钥,所以不用输入用户名密码就可以执行git命令.现在密码变了,取消公钥, ...

  7. Java知多少(69)面向字节的输入输出流

    字节流以字节为传输单位,用来读写8位的数据,除了能够处理纯文本文件之外,还能用来处理二进制文件的数据.InputStream类和OutputStream类是所有字节流的父类. InputStream类 ...

  8. 八. 输入输出(IO)操作4.面向字节的输入输出流

    字节流以字节为传输单位,用来读写8位的数据,除了能够处理纯文本文件之外,还能用来处理二进制文件的数据.InputStream类和OutputStream类是所有字节流的父类. InputStream类 ...

  9. 使用expect实现自动交互,shell命令行自动输入,脚本自动化,变量引用,expect spawn执行带引号命令,expect 变量为空,不生效,不能匹配通配符*,函数,数组

    背景 有需求,在允许命令或者脚本跳出交互行,需要进行内容输入,但需要人手动输入,不是很方便,此时可以通过expect来实现自动互动交互. expect是一个自动交互功能的工具,可以满足代替我们实际工作 ...

随机推荐

  1. Spring注解之 Transactional

    @Transcational 用于事务回滚 @Transcational属性如下: 属性 类型 描述 value String 可选的限定描述符,制定使用的事务管理器 propogation enum ...

  2. djangobb之debug-toolbar查看其sql

    #djangobb之views show_forum(request, forum_id, full=True) default queries including duplicates ) Quer ...

  3. JS 事件 Event

    注册事件 target.addEventListener(type, listener, options); 或者 target.addEventListener(type, listener, us ...

  4. day11-mysql中的mysql数据库不见了

    mysql中的mysql数据库不见了 昨天刚刚在vmware虚拟机的linux上安装mysql,今天登上就发现一个问题.通过网上漫长的寻找,终于解决了.所以我在这把我解决的步骤跟大家分享一下. 问题就 ...

  5. 使用ssh密钥登录虚拟主机里的另一台主机报警的解决方案

    提示:Address 192.168.*.* maps to localhost, but this does not map back to the address - POSSIBLE BREAK ...

  6. UIPanGestureRecognizer translateInView, locationInView

    假设在panGesture的回调事件里已经拿到了panGestureRecognizer CGPoint point = [panGestureRecognizer locationInView:se ...

  7. 初识web.xml文件

    做了那么久的web项目都没有花心思了充分解下这个文件有什么用,看项目配制是否都差不多呢 ======================================================== ...

  8. python catch socket timeout

    python catch socket timeout import socket try: # do something. except socket.timeout as e: # socket ...

  9. 2312--1.3.4 Prime Cryptarithm 牛式

    Description 下面是一个乘法竖式,如果用我们给定的那n个数字来取代*,可以使式子成立的话,我们就叫这个式子牛式. * * * x * * ------- * * * * * * ------ ...

  10. 修改 计算机名后,修改SQLserver 注册服务器对象的名称,及登陆名

    select @@ServerName --查看当前所有数据库服务器名称select * from Sys.SysServers --修改数据库服务器名称sp_dropserver 'old_serv ...