scanf 異常分析 和 解決辦法

2021-10-06 07:04:43 字數 2478 閱讀 9839

用getchar吸掉回車等會對scanf獲取資料產生干擾的字元(百試不爽)

1.scanf(「%d\n」,&t);

異常範例:

#include

intmain()

;for

(int i =

0;i <

5;i ++

)for

(int i =

0;i <

7;i++

)printf

("%d :%d "

,i,a[i]);

}

解決辦法:

①把\n,\t等去掉就好了。如果要用\n,\t,來規範輸入,可以在輸入後加個printf("\n");或者printf("\t");

②如果非要用』\n』,』\t』,就在scanf後面寫個getchar吸掉這些多餘字元。

分析

scanf 對資料的獲取是嚴格按照雙引號內的格式進行的,所以上述例子中每輸入乙個資料都要有個回車,即\n來滿足格式,所以輸入1後的回車(\n)被當成了輸入格式,而本身scanf需要乙個回車(\n)來結束此次資料輸入,所以再輸入2時,2被留在了資料緩衝區之,直到2之後輸入的回車(\n)來充當輸入輸入資料1的結束命令.

2.scanf(「%d」,&t);對scanf(「%c」,&c);的影響。

eg:

#include

intmain()

;int k;

scanf

("%d"

,&k)

;for

(int i =

0;i <

5;i ++

)printf

("k: %d\n"

,k);

printf

("輸出字元: ");

for(

int i =

0;i <

5;i++

)printf

("a[%d]:%c "

,i,a[i]);

printf

(" 輸出字元ascii碼: ");

for(

int i =

0;i <

5;i++

)printf

("a[%d]:%d "

,i,a[i]);

}

解決方法

scanf%c使用難度較大,比較容易導致錯誤,所以建議謹慎使用。

①用寫乙個getchar在每個scanf後面吸掉回車符(個人比較建議,能過平台測試,c++也會用到)這樣才能使得scanf("%c")讀到想要的字元,而不是回車符。

②用scanf("%s『』)scanf("%c")代替來獲取字元(要自己先試下)

③如果只是編譯器,oj上好像用不了,在scanf("%d",&k);之後加個fflush(stdin)語句可以起到清空資料緩衝區的作用。

分析:

對於這個**樣例如果自己在編譯器上跑一下,結果上看,a[0]獲取的是換行符,ascii碼為10,'e』並沒有被a獲取。

用於結束scanf輸入的回車被%c,當作字元獲取了。建議獲取字元時別用%c。%c會將空格,回車等,一切符號讀入。

雖然以上問題可以通過在scanf("%d",&k);之後加個fflush(stdin)語句(清空資料緩衝去內字元。

3.使用scanf易錯點。

1.注意輸入資料要按照scanf內雙引號給出的格式。

2.scanf中%s,不需要&,且%s不讀空格,製表符,回車符,會把這些字元當做分隔符,遇到空格就停,可用gets()函式來獲取含空格字串。

3.scanf函式返回值為成功讀入的資料項數。fscanf 函式返回值也是成功讀入的資料項數,檔案末尾隱藏著eof,所以,最後一次會獲取到eof。

4.scanf()返回值使用

可以利用scanf和fscanf函式返回值來確定是否成功讀入正確資料,具體實現如下

//method1if(

fscanf

(f2,

"%d %s"

,&s -> data.snum, s -> data.name)==2

)else

//method2

while(!

scanf

("%d"

,&choose)

)//資料輸入異常處理

oracle錯誤異常資訊,和解決辦法

1.ora 02292外來鍵約束問題 一般在刪除時會遇到 原因 通常在刪除某個表a的時候,會出現這個錯誤。原因是另乙個表b的某個字段引用了a表的某個字段作為外來鍵約束 解決辦法 1.先檢視是哪個表引用了a的字段做為外來鍵 select table name from all constraints ...

資料庫程式設計 MySQL 常見異常和解決辦法

mysqlslap 可以用於模擬伺服器的負載,並輸出計時資訊。測試時,可以指定併發連線數,可以指定 sql 語句。如果沒有指定 sql 語句,mysqlslap 會自動生成查詢 schema 的 select 語句。但是可能會報錯 mysqlslap unknown variable default...

CSS浮動副作用問題分析和解決辦法

塊狀元素,會鑽進浮動元素的下面,被浮動元素所覆蓋 行內元素,例如文字,則會環繞在浮動元素的周圍,為浮動元素留出空間 浮動元素的父元素坍縮 手動給父元素新增高度通過clear清除浮動 clear屬性 某個方向上不能有浮動 clear取值 left 元素的左邊不能有活動運輸 right 元素的郵編不能有...