前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >C++ 中的getline()函数用法详解

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

作者头像
全栈程序员站长
发布于 2022-11-16 10:19:13
发布于 2022-11-16 10:19:13
6.5K00
代码可运行
举报
运行总次数:0
代码可运行

遇到了要输入一行字符串的操作,我想除了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:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 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:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 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()用法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
istream&getline(char * s,streamsize n);
istream&getline(char * s,streamsize n,char delim);

头文件#include<iostream>

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

n是要读取的字符个数

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

例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//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.cn/234560.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年11月2日 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、getline()用的比较多的用法
  • //如果在使用getline()之前有使用scanf()那么需要用getchar()将前面的换行符读取,再使用getline(),这是我在编程时遇到的,希望大家重视一下
  • 总结;可以看出来,getline()这个函数是可以读取空格,遇到换行符或者EOF结束,但是不读取换行符的,这与fgets()存在着差异
  • 总结可以看出,当我以#作为结束符时,#以及#后面的字符就不再读取。
  • 二、cin.getline()用法
    • 总结:可以看出,cin.getline()是将字符串存储在字符数组当中,也可以读取空格,也可以自己设置结束符标志
    • 在日常使用中我们经常需要将getline与while结合使用
    • 例1:
    • 例2:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档