學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函式 功能 函式用於輸入流...