在c++中,各種輸入方法還是不少的,而且各有所異,本文做一點簡要總結,主要涉及如下內容:cin、cin.get()、cin.getline()、getline()、gets()、getchar()。
輸入原理簡述:
程式的輸入都建有乙個緩衝區,即輸入緩衝區。每次輸入過程是這樣的,當一次鍵盤輸入結束時會將輸入的資料存入輸入緩衝區,而cin函式直接從輸入緩衝區中取資料。正因為cin函式是直接從緩衝區取資料的,所以有時候當緩衝區中有殘留資料時,cin函式會直接取得這些殘留資料而不會請求鍵盤輸入。
比如下面的例子:
void test_input()
{ string str;
cout
cout<>str;
cout<
當然對於以上的情況,也有解決的方案,那就是在第二次呼叫cin>>str,之前通過cin.sync()來清空輸入緩衝區,看一下下面的例子,此處不贅述:
void test_input()
{ string str;
cout
cin.sync();
cout<>str;
cout<
各種輸入方法簡介:
1、cin>>
根據cin>>sth 中sth的變數型別讀取資料,這裡變數型別可以為int,float,char,char*,string等諸多態別。這一輸入操作,在遇到結束符(space、tab、enter)就結束,且對於結束符,並不儲存到sth中。
void test_input()
{ char ch1[10],ch2[10];
cout
cin>>ch2;
cout<
2、cin.get(字元陣列名,接收長度,結束符)
其中結束符意味著遇到該符號結束字串讀取,預設為enter,讀取的字元個數最多為(長度-1),因為最後乙個為"\n"。要注意的是,cin.get()操作遇到結束符停止讀取,但並不會將結束符從緩衝區丟棄。cin.get()有如下幾種用法:
(1)接收乙個字元ch=cin.get()或cin.get(char ch),二者等價,看兩個例子
void test_input()
{ char ch1,ch2;
cout<
來看幾組測試:
(2)接收一定長度的字串cin.get(字元陣列名,接收長度,結束符),結束符為可選引數,預設為enter,可以接受space 、tab,對於結束符的處理要注意,結束符並不會丟掉,同樣看幾個例子。
(3)cin.get( ),注意此時沒有引數可用於捨棄輸入流中的不需要的字元,或者捨棄回車,彌補cin.get(字元陣列名,字元數目,結束符)的不足。對(2)中的**加入一句話cin.get()如下:
void test_input()
{ char ch1,ch2[10];
cout<
3、cin.getline(字元陣列名,接收長度,結束符)
其用法與cin.get(字元陣列名,接收長度,結束符)極為類似。cin.get()當輸入的字串超長時,不會引起cin函式的錯誤,後面若有cin操作,會繼續執行,只是直接從緩衝區中取資料。但是cin.getline()當輸入超長時,會引起cin函式的錯誤,後面的cin操作將不再執行。如下**:
4、getline(istream is,string str,結束符)
同樣,此處結束符為可選引數(預設依然為enter)。然而,getline()與前面的諸多存在的差別在於,它string庫函式下,而非前面的istream流,所有呼叫前要在前面加入#include。與之對應這一方法讀入時第二個引數為string型別,而不再是char*,要注意區別。另外,該方法也不是遇到空格就結束輸入的。
void test_input()
{ string str;
cout<
5、gets(char *ch)
gets()方法同樣接受乙個字串,但是與getline()不同,它的引數為char*,而不是string,另外若定義char ch[n],長度為n,則樣注意輸入的字串長度不要大於n,否則會報錯。同樣gets()對空格也不敏感。
void test_input()
{ char ch[10];
cout<
好吧,就到這裡吧,其實還有getchar()、getch()等,這裡就不一一贅述了。
C 輸入函式 總結
cin 的結束符有enter space tab cin.get 的結束符只有enter,但會把enter放入佇列等待 cin.getline 的結束符也只有enter,但不會把enter放入佇列 1.cin.getline cin的getline需要這樣用 cin.getline s,50,n 或...
C和C 鍵盤輸入函式總結
說明 可以讀入包括空格 跳格和回車在內的空白字元 1.gets 用於一維字串中,可以接受空格 include gets 包含在標頭檔案stdio.h中 char s gets s 2.gets s 用於二維陣列中,可以接受空格 include include using namespace std ...
C 輸入方法總結
最近在看c primer plus時經常會混淆各種輸入方法,例如cin,cin.get cin.getline getline 等,所以想做乙個總結 程式的輸入都有乙個緩衝區,當乙個程式結束輸入時,會將輸入的資料都放到輸入緩衝區,cin的函式都是從輸入緩衝區取資料的,所以當輸入緩衝區有殘留資料時,c...