C++中的cin、getline()、get()。

來源:互聯網
上載者:User

標籤:

cin是C++中常用的一種輸入方式,通常與>>運算子結合使用,解釋為從輸入資料流中抽取出字元存入到想要儲存的變數中。

eg:

#include <iostream>using namespace std;int main(){    char name[20];    cout << "Enter your name: " << endl;    cin >> name;    cout << "your name is: " << name <<endl;    return 0;}

樣本示範了cin的用法,cin >> name表示使用者輸入的字串先存到輸入資料流中,後又取出存入name數組中。>>運算子表示了一種流的流動方向。

此處我們輸入的是單個單詞,用分行符號結尾。

接著看下面的樣本:

#include <iostream>using namespace std;int main(){    char name[20];    char food[20];    cout << "Enter your name: " << endl;    cin >> name;    cout << "Enter your favorite food: " << endl;    cin >> food;    cout << "your name is: " << name <<endl;    cout << "your favorite is: " << food << endl;    return 0;}

假設我們name輸入的是Tom Jerry,運行代碼代碼會發現我們並沒有輸入food的機會,代碼就運行完成了。輸出結果如下:

這是為什麼呢?要弄清楚這個問題,我們需要知道cin作為接受輸入的途徑,它是以什麼作為標示來表示已完成字串輸入的。

當我們使用cin來接受輸入時,要記住它是以空白來確定字串的結束位置的,這裡的空白指空格、定位字元和分行符號。知道這一點,我們就清楚了。在第一個樣本中,我們的輸入是以分行符號結束的。在這個樣本中,我們輸入字元時,帶了兩個可以標示結尾的字元,一個是空格,另一個是分行符號。

這個例子的實際過程是:Tom作為第一個字串儲存在name數組中,遇到空格,這時第一個cin操作完成;Jerry被留在輸入隊列中,遇到cin >> food;語句,發現輸入隊列中有Jerry,因此讀取Jerry,並存入food數組;遇到分行符號,此時cin操作結束。這樣輸出結果就是我們所看到的那樣。

到了這裡,我們會發現以cin作為輸入,有時候並不能滿足我們的需要,例如讀取整行。。

 

下面介紹2中每次可以讀取一行的輸入方式。

1、getline();

getline()行數讀取整行,並以分行符號來標示結尾,並且會丟棄這個分行符號。要調用該方法,需採用cin.getline()形式。

getline()方法接受兩個參數,getline(arrName, length);

第一個參數表示儲存讀入行的數組,第二個表示要讀取的字串長度。注意這個長度是已經包括Null 字元‘\0‘的長度,實際可讀入長度是(length - 1)。

eg:

#include <iostream>using namespace std;int main(){    char name[20];    char food[20];    cout << "Enter your name: " << endl;    cin.getline(name,20);    cout << "Enter your favorite food: " << endl;    cin.getline(food,20);    cout << "your name is: " << name <<endl;    cout << "your favorite is: " << food << endl;    return 0;}

運行結果如下:

getline()還有一種接受3個參數的形式,getline(arrName, length, char ch);第三個參數表示的是自己定義的結尾符。

#include <iostream>using namespace std;int main(){    char name[20];    char food[20];    cout << "Enter your name: " << endl;    cin.getline(name,20);    cout << "Enter your favorite food: " << endl;    cin.getline(food,20,‘l‘);    cout << "your name is: " << name <<endl;    cout << "your favorite is: " << food << endl;    return 0;}

結果:

2、get()

get()成員函數有多種變體,下面介紹get(arrName, length);參數的含義和結尾符跟getline()相同,不同的地方是get()方法不會丟棄行尾的分行符號,而是會將他繼續留在輸入隊列中。

eg:

#include <iostream>using namespace std;int main(){    char name[20];    char food[20];    cout << "Enter your name: " << endl;    cin.get(name,20);    cout << "Enter your favorite food: " << endl;    cin.get(food,20);    cout << "your name is: " << name <<endl;    cout << "your favorite is: " << food << endl;    return 0;}

結果:

由於分行符號會被儲存到輸入隊列中,cin.get(food,20)這段代碼讀到的就是分行符號,而分行符號預示著輸入走到了結尾,所以這句代碼不會讀到任何字串,程式就結束了。

要避免這種情況可以在代碼中加入一句cin.get();

 cin.get(name,20); cout << "Enter your favorite food: " << endl; cin.get();//read newline; cin.get(food,20);

結果:

cin.get()讀取單個字元,它可以處理分行符號。

 

不同的調用方式

上述兩個函數都有一種拼接的調用方式。由於通過cin調用get()方法會返回一個cin對象,所以可以有這樣的調用方式:cin.get(arrName,length).get()。同理,getline()也是類似的。這裡不在過多敘述

 

2015-06-06 10:25:41

 

C++中的cin、getline()、get()。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.