輸入的那些函式

2021-06-26 06:29:06 字數 2356 閱讀 7599

學c++的時候,這幾個輸入函式弄的有點迷糊;這裡做個小結,為了自己複習,也希望對後來者能有所幫助,如果有差錯的地方還請各位多多指教(本文所有程式均通過vc 6.0執行)

1、cin 

2、cin.get() 

3、cin.getline() 

4、getline() 

5、gets() 

6、getchar()

附:cin.ignore();cin.get()//跳過乙個字元,例如不想要的回車,空格等字元

1、cin>>

輸入原理:

程式的輸入都建有乙個緩衝區,即輸入緩衝區。一次輸入過程是這樣的,當一次鍵盤輸入結束時會將輸入的資料存入輸入緩衝區,而cin函式直接從輸入緩衝區中取資料。正因為cin函式是直接從緩衝區取資料的,所以有時候當緩衝區中有殘留資料時,cin函式會直接取得這些殘留資料而不會請求鍵盤輸入

你倘若不終止輸入 就會一直往緩衝區寫 .....

#1:

#include 

using

namespace std;

int main()

測試:

abcdefgh (回車)

abcd (輸出) 

(輸出-換行)

用法1:最基本,也是最常用的用法,輸入乙個數字:

#include

using namespace std; 

main () 

測試一輸入:

a[enter]

輸出:a

97 10

【分析】會發現只執行了一次從鍵盤輸入,顯然第乙個字元變數取的』a', 第二個變數取的是enter(ascii值為10),這是因為該函式不丟棄上次輸入結束時的enter字元,所以第一次輸入結束時緩衝區中殘留的是上次輸入結束時的enter字元!

測試二輸入:

a b[enter]

輸出:a

97 32

【分析】顯然第乙個字元變數取的』a', 第二個變數取的是space(ascii值為32)。原因同上,沒有丟棄space字元。

讀取字串的情況:

輸入結束條件:預設enter鍵(因此可接受空格,tab鍵),可在第三個引數上自定義結束符

對結束符處理:丟棄緩衝區中的enter

#4:

#include 

using

namespace std;

int main ()

測試一輸入:

12345[enter]

輸出:1234

53【分析】第一次輸入超長,字串按長度取了"1234",而』5′仍殘留在緩衝區中,所以第二次輸入字元沒有從鍵盤讀入,而是直接取了』5′,所以列印的ascii值是53(』5′的ascii值)。

測試二輸入:

12d45[enter]

輸出:12

d【分析】第二次輸出為d,說明自定義結束符時不丟棄緩衝區中的結束符

3、cin.getline()   // 接受乙個字串,可以接收空格並輸出

cin.get()當輸入的字串超長時,不會引起cin函式的錯誤,後面的cin操作會繼續執行,只是直接從緩衝區中取資料。但是cin.getline()當輸入超長時,會引起cin函式的錯誤,後面的cin操作將不再執行。

#include

using namespace std; 

main () 

請輸入第1個字串: 

kskr1

請輸入第2個字串: 

kskr2

請輸入第3個字串: 

kskr3

輸出m[0]的值:kskr1 

輸出m[1]的值:kskr2 

輸出m[2]的值:kskr3

4、getline()     // 接受乙個字串,可以接收空格並輸出,需包含「#include」

#include

#include

using namespace std; 

main () 

{ string str; 

getline(cin,str); 

cout輸入:jkljkljkl 

輸出:jkljkljkl

輸入:jkl jfksldfj jklsjfl 

輸出:jkl jfksldfj jklsjfl

和cin.getline()類似,但是cin.getline()屬於istream流,而getline()屬於string流,是不一樣的兩個函式

筆試輸入那些事兒

最近一直在看一些筆試程式設計的題目,作為乙個程式設計菜鳥,很多時候都卡在了輸入輸出階段,收集整理一下,以備不時之需。採取的程式語言是c 很喜歡stl模板,比較省事,自己對與一些定義還不熟練吧 可以看到,同一般的輸入不同,這裡沒有給出有多少組測試用例,但是每個用例都是一行,so 輸入 string s...

輸入輸出那些事

1.如果不加cin.ignore 這行,s2將不會被輸入。原因是緩衝區每次結尾的時候還有 n,而getline 一開始讀的時候認為已經結束,就返回空行。1 include 2 include 3using namespace std 4int main 5 2.ignore函式 功能 函式用於輸入流...

輸入輸出那些事

1.如果不加cin.ignore 這行,s2將不會被輸入。原因是緩衝區每次結尾的時候還有 n,而getline 一開始讀的時候認為已經結束,就返回空行。1 include 2 include 3using namespace std 4int main 5 2.ignore函式 功能 函式用於輸入流...