天天看點

C語言中scanf函數

C語言中scanf函數

在學習C語言的過程中遇到了scanf函數的輸入格式問題

  • 在《C++ primer plus》這本書中對scanf函數輸入說明如下
scanf()函數每次讀取一個字元,跳過所有的空白字元,直至遇到第1個非空白字元才開始讀取。
因為要讀取整數,是以 scanf()希望發現一個數字字元或者一個符号(+或-)。
如果找到一個數字或符号,它便儲存該字元,并讀取下一個字元。
如果下一個字元是數字,它便儲存該數字并讀取下一個字元。scanf()不斷地讀取和儲存字元,直至遇到非數字字元。
如果遇到一個非數字字元,它便認為讀到了整數的末尾。然後,scanf()把非數字字元放回輸入。
這意味着程式在下一次讀取輸入時,首先讀到的是上一次讀取丢棄的非數字字元。
最後,scanf()計算已讀取數字(可能還有符号)相應的數值,并将計算後的值放入指定的變量中。
           

例如

scanf("%d%d", &rows, &cols)

scanf("%d %d", &rows, &cols)

兩個%d中間的空白數量不影響指派

輸入的資料格式如

2 3

或者

2 3

(中間很多空格)都可正确識别并指派,自動忽略空格并分割資料。

但如果格式如下

scanf("%d,%d", &rows, &cols)

輸入的資料格式必須以,分割,如

2, 3

才能正确識别,同時也可忽略其中的空白符,

  • 2, 3 ,

    格式輸入等同于

    2, 3

    ,即将,等同于空白進行忽略
  • 2 3

    輸入會報錯,因為沒有找到

    ,

    ,scanf認為

    2 3

    是一個整體指派給了rows。