Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 464|回复: 0

[默认分类] getline()的使用详解

[复制链接]
  • TA的每日心情
    开心
    2021-12-13 21:45
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2018-7-10 13:37:32 | 显示全部楼层 |阅读模式

    一、getline( )

    1. int main()
    2. {
    3.     string line:
    4.     while(getline(cin,line))
    5.     cout<<line<<endl;
    6.     return 0;
    7. }
    复制代码
    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:";
    getline(cin,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));
      
    1. #include "stdafx.h"
    2. #include<iostream>
    3. #include <stdio.h>
    4. #include <string>
    5. using namespace std;
    6. int main()
    7. {
    8.    char a[30];
    9.    cout << "请输入一个字符串:" << endl;
    10.    cin.getline(a, 10);//第10位存放字符串结束符"\0"
    11.    for (int i = 0; i<10; i++)
    12.       cout << "第"<<i+1<<"个值为:"<<a[i] << endl;
    13.    return 0;
    14. }
    复制代码

    输入:1234567890123
    输出:1 2 3 4 5 6 7 8 9 _ (第10位存放字符串结束符"\0")
       
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-4-20 04:45 , Processed in 0.365227 second(s), 37 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表