scanf使用技巧1
456
7894
54
如何將以上數字輸入陣列呢,只需要用下面這段**
scanf
("%d"
,&arr[i]
);
實際上在鍵盤上輸入時,鍵入4《空格》5《空格》6《空格》…
scanf使用技巧2
當我們有有乙個很大的陣列需要輸入時,而每次輸入元素的個數都不一樣,這時該怎麼辦呢?
使用下面這段**即可
int arr[
100]
,i=0;do
while
(getchar()
!='\n'
);
接下來真正的乾貨來啦!!!
3. scanf和getchar進行讀入字元時的區別(注意是讀入字元)
相信小夥伴都知道,scanf(), getchar()都是標準輸入函式,在程式的讀寫中使用非常頻繁,但很多人都認為其非常簡單,進而造成一些雖小而致命的錯誤
程式1
int
main()
程式2
int
main()
該程式的功能很簡單:就是從鍵盤讀入兩個字元,然後列印出這兩個字元的ascii碼值。
實際操作情況:,當從鍵盤輸入乙個字元a後,就列印出了 結果,同時程式結束執行;列印結果為」65 10「。
其實,有點經驗的小夥伴可以看出,10為空格的ascii碼,這究竟是為什麼呢?
分析
首先,我們看一下輸入操作的原理, 程式的輸入都建有乙個緩衝區,即輸入緩衝區。一次輸入過程是這樣的,當一次鍵盤輸入結束時會將輸入的資料存入輸入緩衝區,而scanf函式直接從輸入緩衝區中 取資料(注意此時僅是在讀入資料是字元的情況下,讀入字串不樣)。正因為scanf函式是直接從緩衝區取資料的,所以有時候當緩衝區中有殘留資料時,scanf函式會直接取得這些殘留資料而不會請求鍵盤輸入,這就是例子 中為什麼會出現輸入語句失效的原因!
其實這裡的10恰好是回車符!這是因為scanf()和getchar()函式是從輸入流緩衝區中讀取值的,而並非從鍵盤(也就是終端)緩衝區讀取。而讀 取時遇到回車(\n)而結束的,這個\n會一起讀入輸入流緩衝區的,所以第一次接受輸入時取走字元後會留下字元\n,這樣第二次的讀入函式直接從緩衝區中 把\n取走了,顯然讀取成功了,所以不會再從終端讀取!這就是為什麼這個程式只執行了一次輸入操作就結束的原因!
4.scanf和gets讀取字串時的區別(注意是字串)
程式3
int
main()
程式的功能:讀入乙個字串輸出,在讀入乙個字串輸出。可我們會發現輸入的字串中不能出現空格,例如:
測試輸入1:
hello world!
輸出:hello
world!
分析
到此程式執行完畢,不會執行第二次的讀取操作!這個問題的原因跟問題一類似,第一次輸入hello world!後,字串hello world!都會被讀到輸入緩衝區中,而scanf()函式取資料是遇到回車、空格、tab就會停止,也就是第乙個scanf()會取出"hello", 而"world!"還在緩衝區中,這樣第二個scanf會直接取出這些資料,而不會等待從終端輸入。
測試輸入2:
hello[enter]
hello[輸出]
world[enter]
world[輸出]
分析
程式執行了兩次從鍵盤讀入字串,說明第一次輸入結束時的回車符被丟棄!即:scanf()讀取字串會捨棄最後的回車符!
我們再看一下gets()讀取字串的情況:
用scanf來讀取乙個字串時,字串中是不可以出現空格的,一旦出現空格,後面的資料就會捨棄殘留在緩衝區中。其實有另外乙個函式是可以接受空格的,那就是gets(),下面我們看一下這個函式的應用,我們把程式3改動一下:
int
main()
分析
顯然與上乙個程式的執**況不同,這次程式執行了兩次從鍵盤的讀入,而且第乙個字串取了hello world! 接受了空格符,而沒有像上乙個程式那樣分成了兩個字串!所以如果要讀入乙個帶空格符的字串時因該用gets(), 而不宜用scanf()!
總結以下
scanf在輸入字元和字串時情況不同
讀取字元:
scanf()以space、enter、tab結束一次輸入,不會捨棄最後的回車符(即回車符會殘留在緩衝區中);
getchar()以enter結束輸入,也不會捨棄最後的回車符;
讀取字串:
scanf()以space、enter、tab結束一次輸入
gets()以enter結束輸入(空格不結束),接受空格,會捨棄最後的回車符!
為了避免出現上述問題,必須要清空緩衝區的殘留資料,可以用以下的方法解決:
c語言裡提供了函式清空緩衝區:函式是fflush(stdin);
或者採用一次輸入後接while(getchar()!='\n'){}
來清空快取區
5.**大佬部落格
你真的會用GOOGLE嗎
平時很多人用google搜尋引擎搜尋資訊,經常搜尋 成千上萬的網頁,檢視幾頁就沒耐心找下去了。在google上搜尋資訊,不只輸入希望搜尋的片語這麼簡單,這樣是無法得到做好的搜尋結果的。google 為使用者提供了很多基本搜尋語法,熟練的運用google搜尋,將很快的搜到我們需要的結果。短語搜尋 布林...
Markdown 你真的會用嗎?
markdown指南 markdown basics 我有幾張阿里雲幸運券分享給你,用券購買或者公升級阿里雲相應產品會有特惠驚喜哦!把想要買的產品的幸運券都領走吧!快下手,馬上就要搶光了。我常用如 橫線分隔符 超級鏈結 markdown 常遇到的問題 縮排 每段文章我都會習慣性地做首行縮排,但如果直...
你真的會用 RequestParam註解嗎?
訪問 map a a b b 分別返回什麼結果?這樣其實最終走到了org.springframework.web.method.annotation.mapmethodprocessor map?a aa b bb 輸出結果 value map public string testannotatio...