c++ 中的 cin.get()函数
cin.get作用:從標(biāo)準(zhǔn)輸入吸收任何字符(包括回車和空格),優(yōu)先吸收cin緩存(之前cin的殘留內(nèi)容)。?
#include <iostream> #include <sstream> #include <fstream> using namespace std; int main() {char ch;ch = cin.get();//從標(biāo)準(zhǔn)輸入接受一個(gè)字符while(ch != ' ') //只要這個(gè)字符不是' '空格即可{ cout << ch << endl; //ch不會(huì)放過(guò)任何字符,包括回車,但是輸出一次,必須是回車后ch = cin.get();}cout << ch; //按鍵回車執(zhí)行一次return 0; }與字符串輸入一樣,有時(shí)候使用 cin>> 讀取字符也不會(huì)按我們想要的結(jié)果行事。
當(dāng)用cin>>讀取數(shù)據(jù)時(shí)候,最后的換行符會(huì)殘留在cin緩存中。
 例如,因?yàn)樗鼤?huì)忽略掉所有前導(dǎo)白色空格,所以使用 cin>> 就不可能僅輸入一個(gè)空格或回車符。除非用戶輸入了空格鍵、制表符之外的其他字符,否則程序?qū)⒉豢赡芡ㄟ^(guò) cin 語(yǔ)句繼續(xù)執(zhí)行(一旦輸入了這樣的字符,在程序可以繼續(xù)下一個(gè)語(yǔ)句之前,仍然需要按回車鍵)。因此,要求用戶“按回車鍵繼續(xù)”的程序,不能使用 >> 運(yùn)算符只讀取按回車鍵的行為。
 在這些情況下,cin 對(duì)象有一個(gè)名為 get 的內(nèi)置函數(shù)很有幫助。因?yàn)?get 函數(shù)是內(nèi)置在 cin 對(duì)象中的,所以可稱之為 cin 的一個(gè)成員函數(shù)。get 成員函數(shù)讀取單個(gè)字符,包括任何白色空格字符。如果程序需要存儲(chǔ)正在讀取的字符,則可以通過(guò)以下任意一種方式調(diào)用 get 成員函數(shù)。
 在這兩個(gè)例子中,假設(shè) cin 是正被讀入字符的 char 變量的名稱:
cin.get (ch);
 ch = cin.get();
如果程序正在使用 get 函數(shù)簡(jiǎn)單地暫停屏幕直到按回車鍵,并且不需要存儲(chǔ)字符,則該函數(shù)也可以這樣調(diào)用:
cin.get();
請(qǐng)注意,在所有這 3 個(gè)編程語(yǔ)句中,get 函數(shù)調(diào)用的格式實(shí)際上是一樣的。首先是對(duì)象的名稱,在此示例中它是 cin。然后是一個(gè)句點(diǎn),其后是被調(diào)用的成員函數(shù)的名稱,在這里當(dāng)然就是 get。語(yǔ)句的末尾是一組括號(hào)和一個(gè)表示結(jié)束的分號(hào)。這是調(diào)用任何成員函數(shù)的基本格式,如圖 1 所示。
 圖 1 成員函數(shù)調(diào)用的基本格式
 下面的程序演示了使用 get 成員函數(shù)的所有 3 種方式:
程序輸出結(jié)果:
This program has paused. Press Enter to continue.
 It has paused a second time. Please press Enter again.
 It has paused a third time. Please press Enter again.
 Thank you!
注意,在 IDE 中運(yùn)行程序時(shí),當(dāng)程序終止,則輸出窗口會(huì)關(guān)閉,而 cin.get 函數(shù)可用于保持輸出屏幕可見(jiàn)。
混合使用 cin>> 和 cin.get
將 cin >> 與 cin.get 混合使用可能會(huì)導(dǎo)致煩人且難以發(fā)現(xiàn)的問(wèn)題。請(qǐng)看下面的代碼段示例:
char ch; //定義一個(gè)字符變量 int number; //定義一個(gè)整型變量 cout << "Enter a number: ”; cin >> number; // 讀取整數(shù) cout << "Enter a character: "; ch = cin.get() ; // 讀取字符 cout << "Thank You!\n";這些語(yǔ)句允許用戶輸入一個(gè)數(shù)字,而不是一個(gè)字符。看來(lái)第 6 行的 cin.get 語(yǔ)句已經(jīng)被跳過(guò)了。這是因?yàn)?cin>> 和 cin.get 使用略有不同的技術(shù)來(lái)讀取數(shù)據(jù)。
 在示例代碼段中,當(dāng)執(zhí)行第 4 行時(shí),用戶輸入一個(gè)數(shù)字,然后按回車鍵。假設(shè)輸入的是數(shù)字 100。按回車鍵會(huì)導(dǎo)致一個(gè)換行符('\n')存儲(chǔ)在鍵盤(pán)緩沖區(qū)數(shù)字 100 之后,如圖 2 所示。
 圖 2 鍵盤(pán)緩沖區(qū)存儲(chǔ)和讀取示意圖
 當(dāng)?shù)?4 行中的 cin>> 語(yǔ)句讀取用戶輸入的數(shù)據(jù)時(shí),它會(huì)在遇到換行符時(shí)停止。換行字符未被讀取,而是仍保留在鍵盤(pán)緩沖區(qū)中。從鍵盤(pán)讀取數(shù)據(jù)的輸入語(yǔ)句只在鍵盤(pán)緩沖區(qū)為空時(shí)等待用戶輸入值,但現(xiàn)在不為空。
 當(dāng)?shù)?6 行中的 cin.get 函數(shù)執(zhí)行時(shí),它開(kāi)始從先前輸入操作停止的鍵盤(pán)緩沖區(qū)讀取,并發(fā)現(xiàn)了換行符,所以它無(wú)須等待用戶輸入另一個(gè)值。這種問(wèn)題最直接的解決辦法是使用 cin.ignore 函數(shù)。
 
?
#include <iostream> #include <string> #include <fstream> using namespace std; int main() {char ch;int number;cout << "Enter a number: ";cin >> number;cout << "Enter a character: ";ch = cin.get();while((ch=cin.get()) != '\n')continue; //這個(gè)程序會(huì)不斷從cin緩存中讀取字符放入ch中,直到遇到回車'\n',所以最后ch還是回車符cout << "Thank you!\n";cout <<"print the ch:" << ch;if(ch == '\n')cout << "ch == '\n'";return 0; } #include <iostream> #include <string> using namespace std; int main() {char ch;ch = cin.get();cout << ch << endl;while(cin.get() != '\n') //cin.get()會(huì)從緩存提取一個(gè)字符,如果有用則用,不用則丟棄cout << (char)(cin.get());return 0; }關(guān)于C++中cin()和cin.get()的用法,問(wèn)題如下
char a[20];
 int x;
 cout<<"輸入x";
 cin>>x;
 cout<<"輸入字符數(shù)組:"
 cin.get();
 gets(a);
 為什么要加cin.get()????
優(yōu)質(zhì)回答:
? ? ? ?get()是對(duì)象cin的一個(gè)成2113員函數(shù), 用于吸收5261字符, 這里可以吸收掉回車。4102?否則回車也會(huì)被存儲(chǔ)到字符數(shù)1653組a里面。 這就相當(dāng)于C程序中的getchar(), 懂了嗎?
 這里用一個(gè)getchar()和cin.get()效果一樣, 不信你可以試一下。。
追問(wèn)
我看到百度上有說(shuō)cin>>x;的cin函數(shù)是丟棄回車的,也就是輸入x之后并沒(méi)有在輸入流保存回車,那為什么還要用get()吸收回車?追答
是的, 但是如果先回車, 想要再輸入字符串的話, 程序就終止了對(duì)吧。。 你沒(méi)有理解gets的用法, 如果遇到回車, gets就起不到應(yīng)有的作用了。。你可以把a(bǔ)輸出, 自己試一下有什么區(qū)別。。。 這段代碼應(yīng)該是某本書(shū)上的對(duì)吧, 作為一段程序, 健壯性是非常重要的。。?
?
與50位技術(shù)專家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的c++ 中的 cin.get()函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
 
                            
                        - 上一篇: c++ io条件状态 的一个例子
- 下一篇: c++ primer 5th p289页
