scanf函式缺陷和處理方法

2021-10-14 09:31:16 字數 1073 閱讀 1537

c變數

char:位元組型資料,乙個char型佔乙個位元組,在命名時用英文單引號引起來。

int:整形資料,佔4個位元組(乙個位元組佔8個bit位)

float:單精度資料,佔4個位元組。

double:雙精度資料,佔8個位元組。

.輸出輸入

輸出函式:printf,printf函式可以輸出不同型別的資料,如整型,float,double,char等,其一般格式為:printf(「%?」,??);

他的意思時把??的數值給%?這個佔位符,從而達到輸出??資料的目的。

輸入函式:scanf函式是輸入資料的c語言標準函式其一般格式:scanf(「%?」,&??);」&」是取位址運算子,取出要輸出資料的位址,把從緩衝區讀取的資料存放在取出的位址中,完成資料的輸入。

**注:**scanf有他的侷限性,當在乙個輸入之後還有乙個輸入字元型的scanf,這時候第乙個scanf把從緩衝區讀出的資料給第乙個字元變數,但是scanf遇到回車就會停止輸入,從而使緩衝區的剩餘回車鍵順理成章的給了下乙個字元變數使得輸入出現錯誤。

#include

intmain()

{char a;

char b;

printf

("input a:\n");

scanf

("%c"

,&a)

;printf

("input b:\n");

scanf

("%c"

,&b)

;int c =

(int

)(a+b)

;printf

("c = %d\n"

,c);

執行結果

根據上側**可以看出執行結果(在linux環境下用gcc編譯然後執行)沒有有效的輸入b的值,為解決這類問題可以在scanf輸入之後加入乙個getchar()函式來吸收回車符號。

關於scanf的幾種處理方法

字元輸入中,賦值順序和快取的聯絡 scanf 是從標準輸入緩衝區中讀取輸入的資料,如果連續輸入兩個 c格式的字元,而中間又要涉及回車,那麼第二個字元將被賦予回車。解決辦法 1 清空輸入緩衝區 第乙個scanf 後加入語句 fflush stdin c 語言清空輸入緩衝區函式2 格式控制中加入空格 將...

關於scanf的幾種處理方法

字元輸入中,賦值順序和快取的聯絡 scanf 是從標準輸入緩衝區中讀取輸入的資料,假設連續輸入兩個 c格式的字元。而中間又要涉及回車,那麼第二個字元將被賦予回車。解決的方法 1 清空輸入緩衝區 第乙個scanf 後增加語句 fflush stdin c 語言清空輸入緩衝區函式 2 格式控制中增加空格...

c陷阱和缺陷 鏈結 預處理 庫函式 可移植性缺陷

1.命名衝突和static修飾符 如果若干個函式需要共享一組外部物件,可以將這些函式放到乙個原始檔中,把它們需要用到的物件都在同乙個原始檔中以static修飾。static同時也適合函式,如果函式g被函式h呼叫,則將函式g和h放到同乙個檔案中,並且申明g是static。1.乙個看似正確的程式 inc...