C語言中正確使用輸入函數scanf

C語言中輸入函數scanf使用不當,會出現各種錯誤,正確使用,會提高效率,現把一些注意事項,正確的使用方法和經驗分享給大家.

    在C語言中空白字符括:空格、換行(\n)、回車(\r)、水平製表符(\t)、換頁符(\f)、垂直製表符(\v)。在scanf讀取的一個參數是數時,開始輸入的空白字符會被忽略,讀取數字直到遇到第一字符不是數字就會停止;讀取字符串時,開始的空白字符也會被忽略掉,讀取字符【0-9a-zA-Z....](各種可顯示字符),直到遇到不是字符停止匹配,(包括空白字符,通常爲回車換行),並且在字符串尾添加空字符,(空字符是字符串輸出結束字符).scanf遇到停止字符時,把停止字符還放入鍵盤字符緩存區中。舉例如下:

#include "stdio.h"

#include "conio.h"

main()

{

    int a;

    char x[20];

    printf("Hello, world\n");

    scanf("%d%s",&a,x);【1】

    printf("%s",x);

    getch();

}

如果輸入.......123.......hello...\r\n(.爲空白字符)

那麼結果:a = 123  x[20] = "hello" x[5]=空字符

如果在格式字符串中包含空白字符時,一個或多個連續空白字符貪婪匹配空白字符直到遇到第一個不是空白字符;格式字符串中包含可顯字符時,那麼精確匹配。如果不匹配,把第一個不匹配的字符放入輸入流中,異常退出。例如:

把上面的【1】改爲scanf("%dabc%s",&a,x);

輸入.......123abc.......hello...\r\n(.爲空白字符),結果同上。如果輸入了

    .......123ab.......hello...\r\n(.爲空白字符) 那麼結果:a=123,字符數組是亂碼。

還有一種情況:當此次輸入結束時,不管正確與否,都要刷新緩存區,否則有滯留字符干擾下一次的輸入。fflush(stdin);rewind(stdin);都可以清空輸入流緩存區。希望大家多做實驗,這樣經驗多一點,出錯的機率就小一點。謝謝大家!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章