scanf與gets讀取字串
scanf與gets函式讀取字串的區別
前兩天有個同學問我scanf與gets的區別說了半天也沒說出來個所以然,就搜了一下,scanf()和gets的區別大致有著幾條:
1.scanf() 會忽略行開頭的所有空格,並以空格、換行符結束輸入;
使用getchar()讀取scanf語句執行後,緩衝區留下的換行符,
gets讀入以任何字元開始的字串,以換行符結束,但之後會丟棄換行符並以'\0'代替;
2. 在資料大量的情況下,用gets讀取快於scanf()10倍以上(注:來自pudn,只有一段開頭話)
3.第一:要注意不同的函式是否接受空格符、是否捨棄最後的回車符的問題!
讀取字元時:
scanf()以space、enter、tab結束一次輸入,不會捨棄最後的回車符(即回車符會殘留在緩衝區中);
getchar()以enter結束輸入,也不會捨棄最後的回車符;
讀取字串時:
scanf()以space、enter、tab結束一次輸入
gets()以enter結束輸入(空格不結束),接受空格,會捨棄最後的回車符!
第二:為了避免出現上述問題,必須要清空緩衝區的殘留資料,可以用以下的方法解決:
方法1:c語言裡提供了函式清空緩衝區,只要在讀資料之前先清空緩衝區就沒問題了!
這個函式是fflush(stdin)。
方法2:自己取出緩衝區裡的殘留資料。
(說實話這個語句我也沒看懂,呵呵!為什麼格式控制是這樣的!希望高手指點一下!)
scanf("%[^\n]",string);
關於scanf與gets的區別
scanf與gets讀取字串 scanf與gets函式讀取字串的區別 前兩天有個同學問我scanf與gets的區別說了半天也沒說出來個所以然,就搜了一下,scanf 和gets的區別大致有著幾條 1.scanf 會忽略行開頭的所有空格,並以空格 換行符結束輸入 使用getchar 讀取scanf語句...
gets 與 scanf 的區別
scanf 函式和gets 函式都可用於輸入字串,但在功能上有區別。若想從鍵盤上輸入字串 hellow word 則應該使用gets 函式。gets可以接收空格 而scanf遇到空格 回車和tab鍵都會認為輸入結束,所有它不能接收空格。char string 15 gets string 遇到回車認...
gets和scanf的區別。
寫乙個函式,輸入乙個十六進製制數,輸出相應的是進製數。程式設計如下 include include include void main char t 20 c long htoi char doprintf ninput a hex number gets t printf decimal numb...