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

 

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • mysql executereader_“c#”中“ExecuteReader”是什么意思?「建议收藏」

    mysql executereader_“c#”中“ExecuteReader”是什么意思?「建议收藏」1、MSDN上说:SendstheCommandTexttotheConnectionandbuildsaSqlDataReader.简单说,就是SqlCommand对象的方法,执行返回数据的Select语句。它的执行方法有两个:第一,ExecuteReader():针对Connection执行CommandText,并返回DbDataReader。第二,ExecuteReade…

  • 数据库系统概论课后习题答案(第五版 王珊、萨师煊)

    数据库系统概论课后习题答案(第五版 王珊、萨师煊)第1章绪论1.试述数据、数据库、数据库系统、数据库管理系统的概念。答:(l)数据(Data):描述事物的符号记录称为数据。数据的种类有数字、文字、图形、图像、声音、正文等。数据与其语义是不可分的。解析在现代计算机系统中数据的概念是广义的。早期的计算机系统主要用于科学计算,处理的数据是整数、实数、浮点数等传统数学中的数据。现代计算机能存储和处理的对象十分广泛,表

    2022年10月26日
  • mysql groupadd_Linux下groupadd命令无法添加用户和组的解决

    mysql groupadd_Linux下groupadd命令无法添加用户和组的解决今天需要给一个linux服务器安装mysql,在安装mysql的时候,出现错误提示:[root@localhostsoftwaretools]#rpm-ivhMySQL-server-5.5.23-1.rhel5.x86_64.rpmPreparing…###########################################[100%]1…

    2022年10月28日
  • 数据库中截断字符串或二进制数据_t3将截断字符串

    数据库中截断字符串或二进制数据_t3将截断字符串MSSQL将截断字符串或二进制数据关键字:mssql错误将截断字符串或二进制数据错误的信息提示大多是这样的:Java代码1.Error![8152]System.Data.SqlClient.SqlException:将截断字符串或二进制数据。语句已终止。Error![8152]System.Data.SqlClient.SqlException:将截断字符串或二进制数

  • 一句话木马怎么连接_js木马源码

    一句话木马怎么连接_js木马源码“EASYNEWS新闻管理系统v1.01正式版”是在企业网站中非常常见的一套整站模版,在该网站系统的留言本组件中就存在着数据过滤不严漏洞,如果网站是默认路径和默认文件名安装的话,入侵者可以利用该漏洞直接上传ASP木马程序控制整个网站服务器。Step1搜索入侵目标使用了“EASYNEWS新闻管理系统v1.01正式版”的网站,在网站页面的底部版权声明处,往往会有关键字符为“WWW.52EAS…

    2022年10月30日
  • 海量数据挖掘MMDS week3:社交网络之社区检测:高级技巧「建议收藏」

    http://blog.csdn.net/pipisorry/article/details/49052255海量数据挖掘MiningMassiveDatasets(MMDs)-JureLeskoveccourses学习笔记之社交网络之社区检测:高级技巧-线性代数方法{这篇博客的内容:使用linearalgebra的概念来解释如何breakgraphsoptimally(i.e

发表回复

您的电子邮箱地址不会被公开。

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