scanf()函式相信就算剛學c語言的朋友也知道,這是乙個標準輸入函式,它是從標準輸入流stdin中讀內容的。它的第乙個引數是格式化字串,後面跟著的儲存內容的位址列表。
如果在全段**中,只呼叫一次,且只獲取乙個變數內容的話,一般不會出現什麼問題。不過在多次呼叫或者在一次呼叫中獲取多個變數內容,**往往會出現不符合預期的結果,下面由我給大家說明一下我自己在呼叫時出現過的問題,以及解決辦法。
從圖中可以看到,b變數輸入的字元與實際儲存的內容不符,b變數應該輸出的值為98,是b對應的ascii碼,但是輸出的是10,是轉義字元\n對應的ascii碼。說明如果是輸入字元變數內容的話,回車鍵作為轉義字元輸入也有可能會被識別儲存。那要怎麼解決呢?
(1)改變第二次呼叫的格式化字串,在前面加上\n,以便過濾掉第一次呼叫後輸入的回車鍵轉義字元。
#include
intmain
(int argc,
char
**ar**)
(2)在第一次呼叫和第二次呼叫之間,多加乙個getchar()函式呼叫。
以上兩種辦法都可以解決這個問題。
正常情況下,按照scanf()函式格式化字串的格式輸入整型內容,執行會正常。
但是如果輸入整型內容與格式化字串的格式不同,或者輸入了非整型內容,從第二次呼叫scanf()函式開始,scanf()函式一直獲取的都是這個非整型內容,而又與格式化字串不符,直接終止這次函式呼叫,導致scanf()函式沒有起到堵塞作用,輸入內容與儲存內容不符。如果在乙個while(1)迴圈中呼叫scanf()函式,就可能會出現死迴圈,導致無法正常執行。
解決這個問題的辦法也是增加呼叫一次getchar()函式。因為很難保證使用者會按照要求輸格式入,所以如果有更好的選擇的話,還是少用scanf()函式吧,其他的非堵塞函式輸入,如kbhit()函式與getchar()函式配合使用的設計就挺基礎好學的。
C語言中scanf函式的使用注意
c語言使用scanf函式時,scanf是從緩衝區進行取值的,連續輸入的資料都是整型或者實型資料時,可以用空格,tab鍵或者回車隔開,如下 int num1 double num2 scanf d lf num1,num2 printf num1 d,num2 lf num1,num2 如果先要輸入整...
C語言 scanf 函式
scanf 函式是用來從外部輸入裝置向計算機主機輸入資料的。scanf 函式的一般格式 案例 已知圓柱體的底半徑radius 1.5,高high 2.0,求其體積。main 案例 已知圓柱體的底半徑為radius,高為high,求其體積。功能 說明函式scanf 的格式及作用。main 程式執行結果...
C語言scanf函式
四 注意事項 編寫程式的主要目的就是為了處理資料。資料從 來?資料的 有很多種方式,如從磁碟檔案中讀取資料 從資料庫中讀取資料 從網頁中抓取資料等,還有一種原始的方式就是從鍵盤輸入資料。在c語言中,有三個函式可以從鍵盤獲得使用者輸入。getchar 輸入單個字元,儲存到字元變數中。gets 輸入一行...