• C++:cin、cin.getline()、getline()的用法


    C++:cin、cin.getline()、getline()的用法

    主要内容:

    1、cin用法

    2、cin.getline()用法

    3、getline()用法

    3、注意的问题

    一、cin>>

    用法1:输入一个数字或字符

    #include <iostream>
    using namespace std;
    main ()
    {
    int a,b;
    cin>>a>>b;
    cout<<a+b<<endl;
    }

    用法2:接收一个字符串,遇“空格”、“TAB”、“回车”就结束

    #include <iostream>
    using namespace std;
    main ()
    {
    char a[20];
    cin>>a;
    cout<<a<<endl;
    }

    输入:jkljkljkl
    输出:jkljkljkl

    输入:jkljkl jkljkl       //遇空格结束
    输出:jkljkl

    二、cin.getline()

    用法:接收一个字符串,可以接收空格并输出

    #include <iostream>
    using namespace std;
    main ()
    {
    char m[20];
    cin.getline(m,5);
    cout<<m<<endl;
    }

    输入:jkljkljkl
    输出:jklj

    接收5个字符到m中,其中最后一个为'',所以只看到4个字符输出

    如果把5改成20:
    输入:jkljkljkl
    输出:jkljkljkl

    输入:jklf fjlsjf fjsdklf
    输出:jklf fjlsjf fjsdklf

    延伸:
    1、cin.getline()实际上有三个参数,cin.getline(接收字符串的变量,接收字符个数,结束字符)
    2、当第三个参数省略时,系统默认为''
    3、如果将例子中cin.getline()改为cin.getline(m,5,'a');当输入jlkjkljkl时输出jklj,输入jkaljkljkl时,输出jk

    三、getline()

    用法:接收一个字符串,可以接收空格并输出,需包含“#include<string>”

    #include<iostream>
    #include<string>
    using namespace std;
    main ()
    {
    string str;
    getline(cin,str);
    cout<<str<<endl;
    }

    输入:jkljkljkl
    输出:jkljkljkl

    输入:jkl jfksldfj jklsjfl
    输出:jkl jfksldfj jklsjfl

    四、注意的问题

    1、cin.getline()属于istream流,而getline()属于string流,是不一样的两个函数

    2、当同时使用cin>>,getline()时,需要注意的是,在cin>>输入流完成之后,getline()之前,需要通过

    str=" ";
    getline(cin,str);

    的方式将回车符作为输入流cin以清除缓存,如果不这样做的话,在控制台上就不会出现getline()的输入提示,而直接跳过,因为程序默认地将之前的变量作为输入流。

    看下面一段程序:

    /*-------------Basic Input/Output-------------*/
    #include<iostream>
    #include<string>
    #include<sstream>
    using namespace std;

    int main(){
        int age;
        //standard input(cin)
        cout<<"Please enter an integer value as your age: ";
        cin>>age;
        cout<<"Your ager is: "<<age<<". ";
        //cin and string
        string mystr;
        cout<<"What's your name? "<<endl;
       mystr=" ";
        getline(cin,mystr);
        getline(cin,mystr);
        cout<<"Hello,"<<mystr<<". ";
        char sex;
        cout<<"Please enter a F or M as your sex: ";
        cin>>sex;
        cout<<"Your sex is: "<<sex<<endl;
        cout<<"What's your favorite team? ";
        mystr=" ";
        getline(cin,mystr);
        getline(cin,mystr);
        cout<<"I like "<<mystr<<". ";

        system("pause");
        return 0;
    }

    运行结果为:

    image

    如果不添加红色代码,则运行结果为:

    image

    为了解决上面留在队列中的不想要的字符,我们可以通过两个方法解决
    第一个是吃掉这个字符,调用一次cin.get()
    第二个是掉过这个字符,调用一次cin.ignore();

    istream & istream::get(char *, int, char = ' ');
    istream & istream::getline(char *, int, char = ' ');
    作用: 从文本中提取指定个数的字符串, 并在串数组末尾添加一个空字符.
    区别: get() 不从流中提取终止字符, 终止字符仍在输入流中. getline() 从流中提取终止字符, 但终止字符被丢弃.

  • 相关阅读:
    DOS命令行编译运行java
    mysql安装
    ICCV2021 | Vision Transformer中相对位置编码的反思与改进
    ICCV2021 | 医学影像等小数据集的非自然图像领域能否用transformer?
    ICCV2021 | TransFER:使用Transformer学习关系感知的面部表情表征
    2021视频监控中的多目标跟踪综述
    ML2021 | (腾讯)PatrickStar:通过基于块的内存管理实现预训练模型的并行训练
    ICCV2021 | SOTR:使用transformer分割物体
    ICCV2021 | PnPDETR:用Transformer进行高效的视觉分析
    使用Latex/Tex创建自己的简历。
  • 原文地址:https://www.cnblogs.com/lsgxeva/p/7953613.html
Copyright © 2020-2023  润新知