C++ 中的getline()函数用法详解

C++ 中的getline()函数用法详解    遇到了要输入一行字符串的操作,我想除了fgets()的方法(fgets()用法链接),getline()也是可以的,但是我对getline的操作不熟悉,便查阅了很多资料,发现都说的很模糊,借这个机会我想彻底理清楚getline的用法;  网上有说getline有两种用法的,我在这总结一下,一、getline()用的比较多的用法 1) istrea…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

        遇到了要输入一行字符串的操作,我想除了fgets()的方法(fgets()用法链接),getline()也是可以的,但是我对getline的操作不熟悉,便查阅了很多资料,发现都说的很模糊,借这个机会我想彻底理清楚getline的用法;

    网上有说getline有两种用法的,我在这总结一下,

一、getline()用的比较多的用法

 

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

Jetbrains全家桶1年46,售后保障稳定

(2)
istream& getline (istream& is, string& str);

 

//如果在使用getline()之前有使用scanf()那么需要用getchar()将前面的换行符读取,再使用getline(),这是我在编程时遇到的,希望大家重视一下

头文件#include<string>

is是一个流,例如cin

str是一个string类型的引用,读入的字符串将直接保存在str里面

delim是结束标志,默认为换行符

例子1:

// extract to string
#include <iostream>
#include <string>
using namespace std;
int main ()
{
    string name;

    cout << "Please, enter your full name: ";
    getline (cin,name);
    cout << "Hello, " << name << "!\n";

    return 0;
}

执行结果:

Please, enter your full name: yyc yyc
Hello, yyc yyc!

总结;可以看出来,getline()这个函数是可以读取空格,遇到换行符或者EOF结束,但是不读取换行符的,这与fgets()存在着差异

例子2:

// extract to string
#include <iostream>
#include <string>
using namespace std;
int main ()
{
    string name;

    cout << "Please, enter your full name: ";
    getline (cin,name,'#');
    cout << "Hello, " << name << "!\n";

    return 0;
}

输出结果:

Please, enter your full name: yyc#yyc
Hello, yyc!

总结可以看出,当我以#作为结束符时,#以及#后面的字符就不再读取。

 

二、cin.getline()用法

istream&getline(char * s,streamsize n);
istream&getline(char * s,streamsize n,char delim);


头文件#include<iostream>

s是一个字符数组,例如char name[100]

n是要读取的字符个数

delim是结束标志,默认为换行符

例子:

//istream::getline example
#include <iostream>     // std::cin, std::cout
using namespace std;
int main () {
  char name[256], title[256];

  cout << "Please, enter your name: ";
  cin.getline (name,256);

  cout << "Please, enter your favourite movie: ";
  cin.getline (title,256);

  cout << name << "'s favourite movie is " << title;

  return 0;
}

 

输出结果:

Please, enter your name: yyc
Please, enter your favourite movie: car
yyc’s favourite movie is car

总结:可以看出,cin.getline()是将字符串存储在字符数组当中,也可以读取空格,也可以自己设置结束符标志

——————————————————————————————————————————————————————

在日常使用中我们经常需要将getline与while结合使用

例1:

string str;
    while(getline(cin,str)){

        。。。
    }

那么在这个例子中是不是我们输入了一个回车就会跳出循环呢,答案是否定的,while只会检测cin的输入是否合法,那么什么时候会跳出循环呢,只有1.输入EOF,2.输入到了文件末尾

例2:

    string str;
    while(getline(cin,str),str != “#”){

       。。。
    }

在这个例子中,逗号运算符的作用就是将最后一个式子作为判定的条件,即while判断的是str != “#”这个条件,只有当输入到str的为#键时,循环才会结束

 

版权声明:本文为原创文章

如需转载请注明出处:https://blog.csdn.net/m0_37616927/article/details/86749099

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/234560.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • bytebuffer.putint_get的用法和例句

    bytebuffer.putint_get的用法和例句最近再看java的NIO,里面提到了几个基本的类,其中ByteBuffer是最基础的,用于Channel的读写传输数据使用。下面总结一下我理解的ByteBuffer。先从代码开始分析staticpublicvoidasIntBuffer(){ByteBufferbBuf=ByteBuffer.allocate(512);bBuf.putI

    2022年10月2日
    3
  • RAID0、RAID1、RAID5、RAID6、RAID10、RAID50的异同与应用

    RAID0、RAID1、RAID5、RAID6、RAID10、RAID50的异同与应用独立磁盘冗余阵列磁盘阵列(RedundantArraysofIndependentDisks,RAID),有“独立磁盘构成的具有冗余能力的阵列”的含义。其思想是将多块独立的磁盘按不同的方式组合为一个逻辑磁盘,从而提高存储容量,提升存储性能或提供数据备份功能。RAID存储系统的组合方式根据RAID级别定义。RAID根据组合方式的不同,有多种设计方案,以下介绍几种常见的RAID方案。1、RAID0(不含校验与冗余的条带存储)2、RAID1(不含校验的镜像存储)3、RAID5(数据块级别的分.

    2022年7月25日
    25
  • java内存模型_简述java内存模型

    java内存模型_简述java内存模型  什么是JMM  JMM即为JAVA内存模型(javamemorymodel)。因为在不同的硬件生产商和不同的操作系统下,内存的访问逻辑有一定的差异,结果就是当你的代码在某个系统环境下运行良好,并且线程安全,但是换了个系统就出现各种问题。Java内存模型,就是为了屏蔽系统和硬件的差异,让一套代码在不同平台下能到达相同的访问结果。JMM从java5开始的JSR-133发布后,已经…

    2025年9月12日
    5
  • mybatis log plugin激活码【中文破解版】

    (mybatis log plugin激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月28日
    209
  • 在MT4上使用双线MACD指标源码

    在MT4上使用双线MACD指标源码MACD指标是股票交易中经典的一款技术分析指标,该指标由两条曲线和柱线组成。基本用法:MACD金叉:DIFF由下向上突破DEA,为买入信号。MACD死叉:DIFF由上向下突破DEA,为卖出信号。MACD绿转红:MACD值由负变正,市场由空头转为多头。MACD红转绿:MACD值正转负,市场多头转空头。DIFF与DEA均为正值,即都在零轴线以上时,大势属于多头市场,DIFF向上突破DEA,可以做买入信号。DIFF与DEA均为负值,即都在零轴线以下时,大势属于空头市场,DIFF向下跌破DEA,可做卖出信号。DE

    2022年5月7日
    100
  • C语言标准库函数大全(ctype、time 、stdio、stdlib、math、string)

    C语言标准库函数大全(ctype、time 、stdio、stdlib、math、string)文章目录C语言函数库一.C语言函数库一.<assert.h>二.<ctype.h>三.<errno.h>四.<limits.h>五.<locale.h>六.<math.h>七.<setjmp.h>八.<signal.h>九.<stdarg.h>十.<stddef.h>十一.<stdio.h&.

    2022年7月20日
    12

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号