C 裡的輸入問題

2021-10-08 22:01:35 字數 2323 閱讀 6360

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

(2). 接受乙個字串,輸入結束條件 :遇到「回車」、「空格、tab鍵。

對結束符的處理 :丟棄緩衝區中使得輸入結束的結束符(enter、space、tab)

結論:當cin>>從緩衝區中讀取資料(不論是字元、數字或字串)時,若緩衝區中第乙個字元是空格、tab或換行這些分隔符時,cin>>會將其忽略並清除,繼續讀取下乙個字元,若緩衝區為空,則繼續等待。但是如果讀取成功,字元後面的分隔符是殘留在緩衝區的,cin>>不做處理。

(1).讀取字元的情況:

<1> cin.get(array_name, arsize)是用來讀取字串的,可以接受空格字元,遇到enter結束輸入,按照長度(arsize)讀取字元。

<2> 輸入超長,則按需要的長度取資料。

<3> cin.get(array,20);讀取一行時,遇到換行符時結束讀取,但是不對換行符進行處理,換行符仍然殘留在輸入緩衝區。可以用cin.get()將換行符讀入變數b來列印驗證,發現列印結果為10,即換行符的ascii碼值。這也是cin.get()讀取一行與使用getline讀取一行的區別所在。getline讀取一行字元時,預設遇到』\n』時終止,並且將』\n』直接從輸入緩衝區中刪除掉,不會影響下面的輸入處理。

<4> cin.get(str,size);讀取一行時,只能將字串讀入c風格的字串中,即char*;但是c++的getline函式可以將字串讀入c++風格的字串中,即string型別。鑑於getline較cin.get()的這兩種優點,建議使用getline進行行的讀取。關於getline的用法,下文將進行詳述。

接受乙個字串,可以接收空格並輸出

c++中定義了乙個在std名字空間的全域性函式getline,因為這個getline函式的引數使用了string字串,所以宣告在了< string>標頭檔案中了。接受乙個字串,可以接收空格並輸出

getline利用cin可以從標準輸入裝置鍵盤讀取一行,當遇到如下三種情況會結束讀操作:1)到檔案結束,2)遇到函式的定界符,3)輸入達到最大限度。

(1).注意,getline遇到結束符時,會將結束符一併讀入指定的string中,再將結束符替換為空字元(』\0』)。因此,進行從鍵盤讀取一行字元時,建議使用getline,較為安全。

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

gets 一般只用於讀取字串;

(1).gets可以接收空格,遇到回車認為輸入結束;

(2).gets 可接受回車鍵之前輸入的所有字元,並用』\n』替代 『\0』。回車鍵不會留在輸入緩衝區中。

(3).gets() 讀取字串時,

語法:gets(字元陣列名或指標);

(4).gets(s) 函式中的變數s為一字串指標。如果為單個字元指標,編譯連線不會有錯誤,但執行後記憶體溢位錯誤。

(5).gets函式可以無限讀取,不會判斷上限,以回車結束讀取,所以應該確保buffer的空間足夠大,以便在執行讀操作時不發生溢位。

(1).當 scanf 從緩衝區中讀取單個字元(%c)時,若緩衝區中第乙個字元是空格、tab或換行這些分隔符時,scanf 不會將其忽略,會讀取並清除。

(2).當 scanf 從緩衝區中讀取數字或字串(非單個字元)時,若緩衝區中第乙個字元是空格、tab或換行這些分隔符時,scanf 會將其忽略並清除,繼續讀取下乙個字元,若緩衝區為空,則繼續等待。但是如果讀取成功,字元後面的分隔符是殘留在緩衝區的,scanf 不做處理。

(3).scanf 讀取字串時,當遇到空格、回車和tab鍵都會認為輸入結束。當遇到回車,空格和tab鍵會自動在字串後面新增』\0』,但是回車,空格和tab鍵仍會留在輸入的緩衝區中。(所以它不能接收包含空格、回車或tab等的字串)

getchar()是在輸入緩衝區順序讀入乙個字元(包括空格、回車和tab);注意,getchar函式只能接受單個字元,輸入數字也按字元處理,輸入多於乙個字元時,只接收第乙個字元。

(1).getchar 由巨集實現:#define getchar() getc(stdin)。getchar有乙個int型的返回值。當程式呼叫getchar時,程式就等著使用者按鍵,使用者輸入的字元被存放在鍵盤緩衝區中,直到使用者按回車為止,此時進入到輸入緩衝區中(回車字元也放在緩衝區中)。

(2).當使用者鍵入回車之後,getchar才開始從stdin流中每次讀入乙個字元。getchar函式的返回值是使用者輸入的第乙個字元的ascii碼,如出錯返回-1,且將使用者輸入的字元回顯到螢幕。

(3).如果使用者在按回車之前輸入了不止乙個字元,其他字元會保留在輸入緩衝區中,等待後續getchar呼叫讀取。即後續的getchar呼叫不會等待使用者按鍵,而直接讀取緩衝區中的字元,直到緩衝區中的字元讀完為後,才等待使用者按鍵。

C語言裡的scanf連續輸入出錯問題

今天在看 時發現乙個有趣的東西,下面看一段 可以看到輸入輸出出現了問題,那是什麼問題呢,經過網上查閱應該是快取的問題,就是說第一次輸入account時的enter回車也被快取到了裡面,所以說清一下快取就可以解決這個問題,清理剩下的快取有三種方法,分別是利用系統自帶的fflush方法 再次讀取乙個字元...

Unreal裡的輸入

unreal裡的input被我分為兩類,1 只控制possesed pawn的actionevent和axisevents,需要配合設定project settings裡的input。2 可以控制整個場景的任何物體。用的比較多的是keyevents和mouseevents,當然,如果你用搖桿外設,用...

C 中的輸入問題

1.cin 這個函式在遇到空格 回車 tab都表示輸入結束2.變數 cin.get 輸入乙個字元3.cin.get 字串變數,變數大小 cin.getline 字串變數,變數大小 兩者類似 4.getline 輸入一行字串函式的話,遇到空格就不會返回了,遇到回車才返回 getline cin,str...