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

來源:互聯網
上載者:User

標籤:lin   input   數組   ios   return   using   string流   bsp   and   

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中,其中最後一個為‘\0‘,所以只看到4個字元輸出

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

輸入:jklf fjlsjf fjsdklf
輸出:jklf fjlsjf fjsdklf

延伸:
1、cin.getline()實際上有三個參數,cin.getline(接收字串的變數,接收字元個數,結束字元)
2、當第三個參數省略時,系統預設為‘\0‘
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="\n";
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<<".\n";
    //cin and string
    string mystr;
    cout<<"What‘s your name? "<<endl;
   mystr="\n";
    getline(cin,mystr);
    getline(cin,mystr);
    cout<<"Hello,"<<mystr<<".\n";
    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="\n";
    getline(cin,mystr);
    getline(cin,mystr);
    cout<<"I like "<<mystr<<".\n";

    system("pause");
    return 0;
}

運行結果為:

如果不添加紅色代碼,則運行結果為:

 

為瞭解決上面留在隊列中的不想要的字元,我們可以通過兩個方法解決
第一個是吃掉這個字元,調用一次cin.get()
第二個是掉過這個字元,調用一次cin.ignore();

 

istream & istream::get(char *, int, char = ‘\n‘);
istream & istream::getline(char *, int, char = ‘\n‘);
作用: 從文本中提取指定個數的字串, 並在串數組末尾添加一個Null 字元.
區別: get() 不從流中提取終止字元, 終止字元仍在輸入資料流中. getline() 從流中提取終止字元, 但終止字元被丟棄.

 

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.