scanf 後用gets 出現跳過求詳細的解釋

2022-04-01 20:21:33 字數 3467 閱讀 7522

1樓:

緩衝區裡保留所有從鍵盤打入的鍵,包括空格,空白鍵,回車。

輸入語句 scanf(),gets(), ...都是到 緩衝區 裡 按語法規則 讀東西,轉換內容。

當 緩衝區 裡 內容 用完了,或不夠 輸入語句 用 時,輸入語句 等待....。

從鍵盤打入的東西,只有當遇到 enter 鍵 時,才 通過 作業系統 進 緩衝區,沒遇到 enter 鍵不進 (或者說scanf(),gets(), 等語句,沒遇到 enter 鍵輸入事件發生時,不開始工作)。

空白和回車何時被用掉與讀語句種類和讀法讀的格式有關。

gets() 是讀一行字串,包括在前在後在半當中的 空格,空白,....

scanf("%d",&k); 和 scanf("%d\n",&k); 不同。後者可以吃掉一個 enter 鍵。

簡單保險的辦法是用 fflush(stdin); 清除 輸入緩衝區。你就 不用擔心 輸入行 殘留 的數字,字元,空白和enter 鍵:

scanf(。。。); fflush(stdin); 再 gets();

gets()函式沒有執行,直接跳過了!求解釋!

關於c語言裡的gets()問題,為什麼名字輸入被跳過?

2樓:淡若親風

gets函式可能把stdin緩衝區裡面的內容讀到陣列裡面,所以會被跳過

gets()和scanf()混用問題

scanf能不能與gets一起用,請說明原因,詳細點哈。 我試過,好像不能

3樓:匿名使用者

gets函式可以一次接收一行輸入串,其中可以有空格,也就是說空格可以做為字串的一部分輸入.

而scanf函式接收的字串不會含有空格,即遇到字空格時,認為字串輸入結束,也就是說空格是scanf預設的結束符號。

scanf和gets不能混合使用,如果一個程式中用scanf的話,一般不能再用gets,反之亦然。 1:...

2:gets()輸入字串時,可以包含空格在內的字元,在回車時,自動將字串結束標誌'\0'賦予字元陣列最後一個元素。scanf函式不能輸入包含空格字元的字串,也就是說空格是scanf預設的結束符號。

3:如果像你在你的程式中提到的只把for迴圈中gets改為scanf的話,在後面該輸入的時候直接跳過的原因是,在結束前一個scanf輸入時輸入的回車被後一個gets輸入時接受,也就是說前一個地方輸入的「資料+回車」分別被兩個地方接受。此種問題會出現在gets和scanf交接處。

只需要在程式中統一改為scanf和gets就可以了。

4樓:

scanf 讀到空字元後停止,比如 空格 換行 tab 而gets只讀到換行後才停止

5樓:果天才

應該可以。我們老師昨天用的時候,就是前面用的gets,後面寫的scanf。一前一後,不影響的

c語言的中gets(s)和scanf("%s",s)的區別

6樓:有錢買不起房子

gets 字串中可以有空白符號,遇到回車終止輸入。

scanf("%s")遇到第一個空白符號或者回車停止輸入

7樓:

函式:gets(字元指標)

標頭檔案:string.h(c中),c++不需包含此標頭檔案原型:char *gets( char *buffer );

功能:從stdin流中讀取字串,直至接受到換行符或eof時停止,並將讀取的結果存放在buffer指標所指向的字元陣列中。換行符不作為讀取串的內容,讀取的換行符被轉換為null值,並由此來結束字串。

get(s)返回的是一個指標

get(s)是與scanf("%s",&s)相似的 不是scanf("%s",s)相似

8樓:尋燦者

你可以把那語句寫兩次(重複的)。。。。。。。

c語言 為什麼scanf那句在gets前面,gets就不執行

c語言中scanf()與gets()函式的區別,哪一個可以讀入空格啊?

9樓:匿名使用者

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

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

2.scanf :當遇到回車,空格和tab鍵會自動在字串後面新增'\0',但是回車,空格和tab鍵仍會留在輸入的緩衝區中。

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

3.gets從標準輸入裝置讀字串函式,其可以無限讀取,不會判斷上限,以回車結束讀取,所以程式設計師應該確保buffer的空間足夠大,以便在執行讀操作時不發生溢位。scanf()可以讀取所有型別的變數。

擴充套件資料:

注意問題

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

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

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

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

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

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

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

10樓:天雲小店

scanf( )函式和gets( )函式都可用於輸入字串,但在功能上有區別。

gets可以接收空格

scanf遇到空格、回車和tab鍵都會認為輸入結束,所有它不能接收空格。

例1:#include

main()

// 依次鍵入asd空格fg回車,asd空格fg回車,則ch1="asd\0",ch2="asd fg\0"。

例2:#include

main()

// 依次鍵入asdfg回車,asdfg回車,則ch1="asdfg\0",c1='\n',ch2="asdfg\0",c2需輸入。

11樓:匿名使用者

scanf()是不可以讀入空格的,他是以空格,tab,和回車為結束符的,而gets是不以空格為結束符的,他可以讀入空格的,他只以回車和tab鍵為結束符。

12樓:鈺氏幽默

gets()可以讀入空格,讀取一個字串…令一個遇到空格就讀去結束…

求此題的詳細解題過程,啊啊啊,求此題的詳細解題過程啊啊啊啊啊啊!

解 1 依題可知,該倉庫被分隔成四塊區域,每塊區域長 42 2.6 0.8 2 2 18.9m 寬 21 1.8 1 2 2 8.6m 1分 2 計算每塊區域可堆放的洗衣機數 1 計算可堆放的層數 按庫房高度計算 4.1 1 4層 按包裝承壓計算 1 110 50 3層 2分 根據上述計算結果可知只...

完美世界到底是不是遮天的前傳,求詳細點的解釋

不能完全說是,現在爭議較大,不過現在支援前傳的為多。1.看修行者的壽元,遮天裡最高的大帝都是幾萬歲,而完美里面的教主都是幾十萬的壽元,而且在邊關還平穩的時候,有個教主就說未來的天地變了,最高也就幾萬的壽元。2.最近的幾十章我記得石昊開出了輪海,被天劫給劈了。而輪海則是遮天最低的境界。3.渡劫天尊曹雨...

一道數學建模中的工程最優化問題,求詳細的解題步驟或講解

假設3m的為a,1.5m的為b,1.2為c,1為d,0.6為e。現在題目是有b數量200,c數量300,d數量400,e數量600,問你可以組成多少a,你還不會嗎?2根 100副du 3m 1.5m 100根zhi 3根 100副 3m 1.2m 3根 100副 1.2m 2根 0.6m 1根 15...