C 輸入函式總結

2021-07-25 01:40:58 字數 2932 閱讀 7344



在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...