當前位置:首頁 » 編程語言 » c語言gets和scanf

c語言gets和scanf

發布時間: 2022-08-28 17:15:29

c語言,scanf%s和gets,不是沒區別嗎

二者都是從終端讀入字元串。
功能分別如下:
1、 gets功能為讀入一行,並將換行符轉換為字元串結束符。
2、 scanf("%s",s);讀入時,遇到空白字元,包括空格,製表符,換行符時均會停止輸入。
從功能上可以看出不同之處:
1 終止條件不同。gets只有遇到\n時才會結束輸入,而scanf遇到空格或製表符時,也會結束輸入。
比如輸入"test string\n"。
用gets得到的字元串為"test string", 二用scanf得到的是"test"。
2 終止後,對終止字元處理不同。
比如輸入為"test\nabcd"。
執行gets後,\n不會留在緩沖區中,即這時調用getchar得到的字元是'a'。
執行scanf後,\n會留在緩沖區,這時調用getchar得到的字元是'\n'。

❷ C語言中gets和scanf的區別

gets會將輸入回車前所有輸入的內容取出來,存放到一個字元數組,包括空格/tab,無論這些內容被空格/tab分成了幾段,gets都會將這行輸入完完整整的放到數組中,通俗點說就是gets會取一行,讀到換行為止。
scanf是格式化輸入,如果只使用最簡單的格式化字元串%s,那麼scanf只會取一個單詞,在輸入流中遇到空格/tab/換行,就會結束。比如輸入流中有"aa
bb
cc"的話,那麼執行scanf("%s",
s),s的值就會是aa,再次執行這句話,s的值就是bb,第三次就是cc。scanf會從輸入流中取多少怎麼取,取決於格式化字元串,也就是scanf的第一個參數;而gets則肯定會取出完整的一行。也就是說在scanf中,換行符等同於空格/tab,但gets中,換行符為讀取結束標志。
還有就是gets取出來的肯定是字元串,如果需要轉其他類型,則需程序中手動判斷;而sacnf就不一定了。

❸ c語言 gets與scanf的順序

應該是回車造成的問題,正常情況這兩個函數不應該混用的。
第一種情況,你在scanf與gets兩個函數中間加一個「getchar();」應該就能得到期望的結果了。

❹ c語言中gets函數和是scanf函數有什麼區別呢

一、指代不同

1、scanf:是C語言中的一個輸入函數。

2、gets:從標准輸入設備讀字元串函數。

二、讀取方式不同

1、scanf:是格式輸入函數,即按用戶指定的格式從鍵盤上把數據輸入到指定的變數之中。

2、gets:可以無限讀取,不會判斷上限,以回車結束讀取,所以程序員應該確保buffer的空間足夠大,以便在執行讀操作時不發生溢出。


三、數據流向不同

1、scanf:函數 scanf() 是從標准輸入流stdin (標准輸入設備,指向鍵盤)中讀內容的通用子程序,可以說明的格式讀入多個字元,並保存在對應地址的變數中。

2、gets:從stdin流中讀取字元串,直至接受到換行符或EOF時停止,並將讀取的結果存放在buffer指針所指向的字元數組中。換行符不作為讀取串的內容,讀取的換行符被轉換為『』空字元,並由此來結束字元串。


❺ C語言中scanf函數與get函數的區別

gets,如果初學的話,可以這么理解,他可以輸入空格
而scanf()不能。
比如要輸入i
am,然後讓他列印出來。那麼用
gets()
輸出時會是i
am
而用
scanf()
輸出時會是i

❻ C語言中scanf()與gets()函數的區別,哪一個可以讀入空格啊

1.scanf不能接受空格、製表符Tab、回車等;對末尾回車符的處理:把回車符保留在緩存中。

gets能夠接受空格、製表符Tab和回車等;對末尾回車符的處理:接收回車,但把回車替換為。

2.scanf :當遇到回車,空格和tab鍵會自動在字元串後面添加'',但是回車,空格和tab鍵仍會留在輸入的緩沖區中。

gets:可接受回車鍵之前輸入的所有字元,並用' '替代 ''.回車鍵不會留在輸入緩沖區中

3.gets從標准輸入設備讀字元串函數,其可以無限讀取,不會判斷上限,以回車結束讀取,所以程序員應該確保buffer的空間足夠大,以便在執行讀操作時不發生溢出。scanf()可以讀取所有類型的變數。

(6)c語言gets和scanf擴展閱讀:

注意問題

(1)在高版本的 Visual Studio 編譯器中,scanf 被認為是不安全的,被棄用,應當使用scanf_s代替 scanf。

(2) 對於字元串數組或字元串指針變數,由於數組名可以轉換為數組和指針變數名本身就是地址,因此使用scanf()函數時,不需要在它們前面加上"&"操作符。

(3) 可以在格式化字元串中的"%"各格式化規定符之間加入一個整數,表示任何讀操作中的最大位數。

(4) scanf函數中沒有類似printf的精度控制。

(5) scanf中要求給出變數地址,如給出變數名則會出錯

(6) 在輸入多個數值數據時,若格式控制串中沒有非格式字元作輸入數據之間的間隔,則可用空格,TAB或回車作間隔。

(7) 在輸入字元數據(%c)時,若格式控制串中無非格式字元,則認為所有輸入的字元均為有效字元。

網路-scanf

網路-gets

❼ C語言gets 和 scanf

我忍不住說一下,
希望已經給出答案的同學們不要介意。
scanf("%s%f",
name[i],
&score);
如果你輸入
「abc
1234」
(注意
引號不是輸入的數據,只是為了方便閱讀)
這個時候
name[i]會讀取數據的,但是讀取的數據遇到空格就視為讀取結束。這樣剩餘下的數據就是
一個空格外加1234.
當score開始讀取的時候,讀到的第一個數據是一個空格,而不是希望的float類型的數據,因此整個緩沖區的流都亂了,所有的數據全部沒有用處。
解決的辦法就是在
%s與%f之間加上一個空格,就可以解決這個問題。

❽ c語言 gets scanf

是這樣的:你在輸入b的值「2」的時候,要結束b的輸入,就會用到ENTER鍵,而這個鍵對應的值雖然不會被讀取,但是它會進入緩存區,然後程序執行到GETS(c)時,緩存區的ENTER值就會被讀取,並賦給C,然後你又結束輸入,再輸入D,於是你運行的結果應該是:
a=1
b=2
c=
d=3
是不是?

熱點內容
加密視頻怎麼播放 發布:2024-12-27 03:35:41 瀏覽:757
java隨機數生成1到10 發布:2024-12-27 03:31:23 瀏覽:530
apachephp文件 發布:2024-12-27 03:16:25 瀏覽:779
human伺服器地址 發布:2024-12-27 03:15:00 瀏覽:576
香港雲伺服器申請 發布:2024-12-27 03:14:16 瀏覽:856
台灣雲存儲價格 發布:2024-12-27 03:14:16 瀏覽:936
主機配置怎麼查 發布:2024-12-27 03:05:48 瀏覽:388
怎麼上傳照片到百度 發布:2024-12-27 03:05:07 瀏覽:882
base64編碼java 發布:2024-12-27 03:05:05 瀏覽:811
java七牛雲存儲 發布:2024-12-27 03:03:39 瀏覽:436