getline()的使用详解

2023-10-31

一、getline( ) 

int main()
{
    string line:
    while(getline(cin,line))
    cout<<line<<endl;
    return 0;
}
getline()的原型:

头文件:#include <string>

istream& getline ( istream &is , string &str , char delim );

其中,istream &is 表示一个输入流,譬如cin

string&str表示把从输入流读入的字符串存放在这个字符串中(可以自己随便命名,str什么的都可以);

char delim表示遇到这个字符停止读入,在不设置的情况下系统默认该字符为'\n',也就是回车换行符(遇到回车停止读入)。

 

给大家举个例子:

string line;

cout<<"please cin a line:";

getlinecin,line,'#');

cout<<"The line you give is:"<<line<<endl;

那么当我输入"You are the #best!" 的时候,输入流实际上只读入了"You are the "#后面的并没有存放到line中(应该是在缓冲区里吧)。然后程序运行结果应该是这样的:

 please cin a line:You are the #best!

 The line you give is:You are the 

while(getline(cin,line))语句

注意这里默认回车符停止读入,Ctrl+Z或键入EOF回车即可退出循环。

在这个语句中,首先getline从标准输入设备上读入字符,然后返回给输入流cin,注意了,是cin,所以while判断语句的真实判断对象是cin,也就是判断当前是否存在有效的输入流。在这种情况下,我想只要你的电脑不中毒不发神经你的输入流怎么会没有效?所以这种情况下不管你怎么输入都跳不出循环,因为你的输入流有效,跳不出循环。

然而有些同学误以为while判断语句的判断对象是line(也就是line是否为空),然后想通过直接回车(即输入一个空的line)跳出循环,却发现怎么也跳不出循环。这是因为你的回车只会终止getline()函数的读入操作。getline()函数终止后又进行while()判断(即判断输入流是否有效,你的输入流当然有效,满足条件),所以又运行getline()函数。

所以,以下的写法根本不可能让你推出while()循环的:

while(getline(cin,line))

    cout<<line<<endl;

二、cin.getline()

此函数会一次读取多个字符(包括空白字符)。它以指定的地址为存放第一个读取的字符的位置,依次向后存放读取的字符,直到读满N-1个,或者遇到指定的结束符为止。若不指定结束符,则默认结束符为'\n'。其语法为:

cin.getline(字符指针(char*),字符个数N(int),结束符(char));

 

#include "stdafx.h"
#include<iostream>
#include <stdio.h>
#include <string>
using namespace std;
 
int main()
{
   char a[30];
   cout << "请输入一个字符串:" << endl;
   cin.getline(a, 10);//第10位存放字符串结束符'\0'
   for (int i = 0; i<10; i++)
      cout << "第"<<i+1<<"个值为:"<<a[i] << endl;
 
   return 0;
}

输入:1234567890123

输出:1 2 3 4 5 6 7 8 9 _ (第10位存放字符串结束符'\0'

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

getline()的使用详解 的相关文章

随机推荐

  • 谈谈javaSE中的==和equals的联系与区别

    前言 和equals是我们面试中经常会碰到的问题 那么它们之间有什么联系和区别呢 今天我们就来聊聊吧 问题 这里先抛出一些比较典型笔试问题 int x 10 int y 10 String str1 new String abc Strin
  • angular 跨域的解决方案

    angular 跨域的解决方案 方法一 修改浏览器参数 方法二 angular的配置解决跨域 本地开发中使用 方法三 通过nginx来设置反向代理解决跨域 生产环境中使用 架设环境 实现的需求 及解决的办法 举例 方法一 修改浏览器参数 使
  • 在Windows下执行Linux命令的几种方式

    由于本人比较熟悉Linux下的命令和shell编程 就搜集了一些在Windows下执行命令的方式 1 Cygwin http www cygwin com cygwin可以简单的认为是在Windows上提供了一个Linux环境 是一个提供大
  • Simulink的U-Y模块(Selector)

    在看官方文档的时候 看到其中一个Simulink系统有一个U Y模块 用于选择输出位 但是在library里面没有找到 经过探索 发现这个模块是selector模块在设置完输出位后的样子 下面说说怎么用selector 选择器块把输入向量或
  • maven项目install时忽略执行test的几种方法

    1 在项目所在文件夹根目录使用maven命令打包时 mvn install Dmaven test skip true 或 mvn install DskipTests true 2 springboot项目中 在pom xml文件的中添加
  • 分享国产低成本低功耗蓝牙无线通信MCU芯片

    分享一款国产高性能 低成本 超低功耗的无线通信MCU芯片 内嵌32位ARM CortexM0 内核的宽电压工作范围的MCU 该芯片不仅集成一个可以工作到高达64MHz的32位的精简指令集的 RISC 的高效处理器 还集成一个功能丰富的蓝牙5
  • 游戏开发unity编辑器扩展知识系列:在Project视图下右键添加菜单子项

    说明 只需要将子项的路径放到 Assets 下即可 右键点击就可以看到了 MenuItem Assets MenuItemForRightMouseDown public static void Init
  • 2023饿了吗Java后端面经和网易Java面经【赶紧来试试!】

    2023饿了吗Java后端面经和网易Java面经 饿了吗Java后端面经 感觉有点难 网易日常Java面经 往期文章 gt gt gt Java最全面试题 五分钟看完 Java后端精选面试题分享 Java经典面试题 带答案 五 Java经典
  • Caffe源码中blob文件分析

    Caffe源码 caffe version commit 09868ac date 2015 08 15 中有一些重要的头文件 这里介绍下include caffe blob hpp文件的内容 1 Include文件 1
  • Qt学习 之 Socket通信(世界上最简单的例子了)

    最近写大作业用到Qt的Socket部分 网上关于这部分的资料都太过复杂 现在总结一下一些简单的应用 有机会可以给大家讲讲用Socket传送文件的代码 这里主要讲解如何实现TCP和UDP的简单通信 socket简介 在LINUX下进行网络编程
  • 3、约瑟夫问题的一种描述是:编号为1,2,……,n的n个人按顺时针方向坐一圈,每人持有一个密码(正整数)。一开始任选一个作为报数上限值m,从第一个开始顺时针自1开始顺序报数,报到m是停止报数。报m的人

    题目 3 约瑟夫问题的一种描述是 编号为1 2 n的n个人按顺时针方向坐一圈 每人持有一个密码 正整数 一开始任选一个作为报数上限值m 从第一个开始顺时针自1开始顺序报数 报到m是停止报数 报m的人出列 将他的密码作为新的m值 从他在顺时针
  • Selenium简单登录测试

    起先使用最新版火狐selenium被禁用 后改用54版 使用selenium测试我要自学网登录过程 登录之前显示如下 登录后显示如下 先打开我要自学网和selenium 将我要自学网的网址复制到selenium的Base URL 按下录制按
  • AOP源码解析(2)AnnotationAwareAspectAutoProxyCreator---Spring源码从入门到精通(十九)

    上篇文章主要讲了AOP的 EnableAspectAutoProxy注解 里面导入的类和执行的后置处理器 AOP源码解析 1 Spring源码从入门到精通 十八 阅读本篇文章 一定要先阅读上篇文章 运行的源码是基于上篇文章的代码 才方便理解
  • DERT:End-to-End Object Detection with Transformers

    文章目录 摘要 1 简介 2 相关工作 2 1 集合预测 2 2 Transformer与并行解码 2 3 目标检测 3 DETR模型 3 1 目标检测集合预测损失 3 2 DETR架构 4 实验 4 1 与Faster R CNN的对比
  • 【UE 粒子练习】06——创建条带类型粒子

    效果 下图呈现的是一种条带粒子跟随普通粒子移动的效果 其中 条带粒子为下图中蓝色部分 橙色部分为普通粒子 步骤 1 新建一个材质 命名为 Mat Ribbon 将用于条带粒子材质 材质域设置为表面 混合模式设置为半透明 着色模型设置为无光照
  • Java、python及phpstudy的环境配置

    由于重装了系统 电脑上啥都没了 正好借此机会写一些从空白开始配置新电脑 希望多踩一点坑 才能帮更多的人解决问题 本文是小白向的 学习过程中看到一些教程缺胳膊少腿 可能会漏掉一些博主觉得easy但是是我不确定的点的地方 所以本篇可能有点啰嗦
  • 期望、方差、协方差与相关系数

    1 利用切比雪夫不等式可以证明方差为0意味着随机变量的取值集中在一点上 2 从协方差可以得到两个变量增减的趋势 称为相关性 3 不相关 比 独立 更弱的概念 独立 必导致 不相关 不相关 不一定导致 独立 4 相关系数是相应标准化变量的协方
  • 使用Termux在安卓手机上运行tomcat服务器

    使用Termux在安卓手机上安装运行tomcat服务器 简单背景 探索尝试 尝试一 使用limbo虚拟机 失败 想念二 使用Linux Deploy安装 直接放弃 尝试三 使用Aid Learning 成功但搁置 尝试四 使用Termux直
  • Django之数据库并发处理

    1 数据库并发处理问题 在多个用户同时发起对同一个数据提交修改操作时 先查询 再修改 会出现资源竞争的问题 导致最终修改的数据结果出现异常 比如限量商品在热销时 当多个用户同时请求购买商品时 最终修改的数据就会出现异常 下面我们来写点代码还
  • getline()的使用详解

    一 getline int main string line while getline cin line cout lt