zoukankan      html  css  js  c++  java
  • 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() 从流中提取终止字符, 但终止字符被丢弃.

  • 相关阅读:
    SPI(1)——Documentation/spi/spi_summary.txt翻译
    TCP协议详解(TCP报文、三次握手、四次挥手、TIME_WAIT状态、滑动窗口、拥塞控制、粘包问题、状态转换图)
    Linux设备树(3)——Linux内核对设备树的处理
    Linux设备树(2)——设备树格式和使用
    [转]Android的taskAffinity
    [转]深入了解iPad上的MouseEvent
    NG2入门
    TypeScript 素描
    TypeScript 素描
    TypeScript 素描
  • 原文地址:https://www.cnblogs.com/lsgxeva/p/7953613.html
Copyright © 2011-2022 走看看