来源: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. node-disconf-client基本配置

    node-disconf-client 需要cppm install node-disconf-client var  disconf  = require (' node-disconf-clien ...

  2. Android Camera2的使用

    参考:https://developer.android.com/reference/android/hardware/camera2/package-summary.html camera2提供了一 ...

  3. PHP 时间相关操作

    使用函式 date() 实现 <?php echo $showtime=date("Y-m-d H:i:s");?> 显示的格式: 年-月-日 小时:分钟:秒 获得当天 ...

  4. delphi c#语法转换

    delphi c#语法转换 delphi c#       s:array[1..5] of integer TIArr  = array of integer; Berlin有这个新功能 TArra ...

  5. linux shell 杂

    1. 字符串截取 var=http://www.baidu.com/index.html echo ${var} var=http://www.baidu.com/index.html /*从左到右第 ...

  6. datetime is not json serializable

    python, datetime is not json serializable import datetime def json_serial(obj): """JS ...

  7. vue.js 组件引用之初级 之二

    1. template 标签也可以实现替换,这样可以省去script标签了 <!DOCTYPE html> <html lang="en"> <hea ...

  8. Flex_概念

    1.Flex是事件驱动的面向对象应用程序框架和编程语言.Flex应用程序加载完毕后,需要做的就是捕获事件,然后作出响应.    Flex是一个庞大的技术组群中的一员.  2.RIA(Rich Inte ...

  9. 两台openwrt 间的免登陆ssh

    参考文档: http://www.360doc.com/content/13/1013/21/3884271_321222563.shtml http://blog.csdn.net/u0110079 ...

  10. JS实现简单的运行代码 & 侧边广告

    /* JS实现简单的运行代码功能 */<!doctype html> <html> <head> <meta charset="utf-8" ...