標籤:
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()。