scanf和gets的區別

2021-10-06 07:15:11 字數 902 閱讀 7693

關於scanf和gets函式

scanf不能接收回車、空格或者tab,但是gets可以讀入空格,輸入分隔符只有回車

此外,兩者對於緩衝區裡的回車符的方式也是不同的。scanf在讀取非空白符之前會忽略回車符(例如在輸入前一直按回車,這時候的回車是被忽略的),讀取之後遇到空白字元(空格、回車、tab)會停止輸入,將回車符留在緩衝區;gets只要一遇到回車就輸入結束,並把回車從緩衝區裡面移走。

示例1:

根據示例,可以看出直接跳過gets,最後列印可以看出gets裡的a是個空白符。

因為前面scanf接收輸入時,最後是以回車結束輸出的,但是回車符還是儲存在緩衝區中,即當時緩衝區中只有乙個回車符,gets來緩衝區讀資料時(鍵盤輸入的資料都是在緩衝區)遇到回車符就停止輸入,並把回車符從緩衝區移走,所以下乙個是可以正常輸入。

示例2

第一行是輸入(hello world !),scanf遇到空白符後就停止輸入,接下來輸入的都儲存在緩衝區中,所以第二行printf出的只有空白符之前的,即(hello)。後面的都用gets接收(後面是沒有從鍵盤輸入的,都是讀取的緩衝區的內容)。

但是gets使用時會報警告,因為沒有規定緩衝區大小,有越界危險。現在有更安全的函式,gets_s(str, buffer),規定了緩衝區大小(第二個引數)。

gets和scanf的區別。

寫乙個函式,輸入乙個十六進製制數,輸出相應的是進製數。程式設計如下 include include include void main char t 20 c long htoi char doprintf ninput a hex number gets t printf decimal numb...

scanf和gets的區別

gets函式可以一次接收一行輸入串,其中可以有空格,也就是說空格可以做為字串的一部分輸入.而scanf函式接收的字串不會含有空格,即遇到字空格時,認為字串輸入結束,也就是說空格是scanf預設的結束符號。scanf和gets不能混合使用,如果乙個程式中用scanf的話,一般不能再用gets,反之亦然...

gets和scanf的區別

1 gets 函式原型 char gets char str 功能為 從stdin流中讀取字串,直至接受到換行符或eof時停止,並將讀取的結果存放在buffer指標所指向的字元數 組中。換行符不作為讀取串的內容,讀取的換行符被轉換為 0 空字元,並由此來結束字串。注意 不會判斷上限,以回車結束讀取,...