1. 程式人生 > >C語言中scanf函式輸入回車符的問題

C語言中scanf函式輸入回車符的問題

 在用c語言編寫輸入語句的時候常用到scanf函式,初學者在剛用scanf函式輸入時,經常會遇到各種各樣的輸入錯誤,最重要的是一定要記住scanf函式的輸入格式,scanf函式裡包含了哪些東西,輸入的時候就必須有哪些東西,比如:scanf("%c%c%c"),那麼輸入的時候就必須連續輸入3個字元,中間不能有任何空格逗號或者回車符等分開,而如果是scanf("%c,%c,%c"),那麼輸入3個字元的時候中間就必須用一個逗號分隔。

       scanf函式最常用的兩種輸入方式%d整數輸入方式,以及%c字元輸入方式。
       用%d方式輸入整數時,輸入一串數字然後按回車符,輸入就完成了。而用%c方式輸入字元時,就稍微複雜一點。一般來說

用%c輸入字元時,當輸完以後,都習慣按一下回車,這時回車符就成了一個問題。




  【例1】:
       scanf("%c",&a); /*此時輸入一個字元,並按下回車,那麼變數a將會正確接收輸入的字元*/
       scanf("%c",&b); /*但是變數b將會接收到回車符,其值為10,或者說ASCII碼為10*/

       【例2】:
        scanf("%d",&x); /*此時輸入一串數字並回車,變數x將正常接收到輸入的整數*/
        scanf("%d",&y); /*變數y不會接收到回車符,需要使用者繼續輸入數字,並回車,正常接收到整數*/

       【例3】:
      scanf("%d",&x); /*此時輸入一串數字並回車,變數x將正常接收到輸入的整數*/
        scanf("%c",&a); /*但是變數a將會接收到回車符,其值為10,或者說ASCII碼為10*/

       【例4】:
        scanf("%d",&x); /*此時輸入一串數字並回車,變數x將正常接收到輸入的整數*/
        scanf("%d",&y); /*若此時輸入的是字母而不是數字,比如輸入“s”並回車*/
                                  /*那麼變數y將不會接收到任何字元或數字,其值保持原樣,不發生任何改變*/
        scanf("%c",&a); /*此時變數a將接收到上一步輸入的字母*/
                                  /*即變數a中儲存的字元將是"s",而不是回車符*/

    【結論】:
        當輸入完整數或字元時,後面還需要輸入字元時,為了避免輸入的字元變成回車符,可以在輸入字元前多加一條scanf語句來吃掉前面的回車符。此時用來吃掉回車符的scanf輸入可以用%c方式,也可以用%d方式。當用%c方式來吃掉回車符時,回車符被讀進了char型別變數中,當用%d方式來吃掉回車符時,回車符並沒有被送進int型別變數中,而是在異常的字元輸入後,被自動清除了。