scanf函數%c前加空格


緩沖區(Buffer)

  緩沖區是在內存中預留的指定大小的存儲空間,用來對輸入/輸出(I/O)的數據作臨時存儲。

空白符(white space)

  一般,程序中所指的空白字符是指空格(space),回車(enter)和制表符(tab)。

scanf

  作用:

    從標准輸入設備(通常是鍵盤)讀取輸入值,並存儲到參數列表中指針所指向的內存單元。

  處理機制:

    以刪除的方式從緩沖區讀入數據:scanf從緩沖區讀入一個數據項,該數據項在緩沖區中就被清除掉。如果scanf需要讀取一個數據項,發現緩沖區當前是空的,那么程序就會在scanf代碼處阻塞,等待用戶輸入,scanf函數接收到相應的數據項之后,在緩沖區中將這一數據項清除,scanf函數返回,程序繼續執行。

  整數%d

    scanf默認的分割符是所有的空白字符。如果一個scanf函數中出現scanf("%d%d",&a,&b),那么用任何一個空白符來分隔兩個整數a,b的值,變量a,b都可以接收到正確的輸入,並且會忽略數據項的前導空白符。

  字符串%s

    忽略前導空白符,默認分隔符是所有空白符。C語言中,scanf會為字符數組末尾加上'\0',要注意邊界。

  字符%c

    不會忽略前導空白符,默認沒有任何分隔符,所有字符都會被當作輸入字符。

    當使用如while(~scanf("%c%c", &a, &b))形式時,兩組a、b字符輸入之間若以回車分隔,后面一組的a就會編程'\n'。處理方法是:

    (1)清空緩沖區:兩組讀入之間使用 fflush(stdin);

    (2)讀取緩沖區數據: 兩組讀入之間使用

        char c;  while((c=getchar())!='\n'&&c!=EOF);

      或者gets()函數    char c[10];gets(c);

      char* gets(char* buffer)從stdin流中讀取字符串,直至接受到換行符或EOF時停止,並將讀取的結果存放在buffer指針所指向的字符數組中。換行符不作為讀取串的內容,讀取的換行符被轉換為null值,並由此來結束字符串。讀入成功,返回與參數buffer相同的指針;讀入過程中遇到EOF(End-of-File)或發生錯誤,返回NULL指針。所以在遇到返回值為NULL的情況,要用ferror或feof函數檢查是發生錯誤還是遇到EOF。
要注意的是gets函數可以無限讀取,不會判斷上限,所以應該確保buffer的空間足夠大,以便在執行讀操作時不發生溢出。如果溢出,多出來的字符將被寫入到堆棧中,這就覆蓋了堆棧原先的內容,破壞一個或多個不相關變量的值。

    (3)在%c前加空格,屏蔽空白符影響。scanf(" %c", c);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM