關於scanf與gets的區別

2021-07-11 11:19:49 字數 802 閱讀 7351

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...