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
(中間很多空格)都可正确識别并指派,自動忽略空格并分割資料。
2 3
2 3
但如果格式如下
scanf("%d,%d", &rows, &cols)
輸入的資料格式必須以,分割,如 2, 3
才能正确識别,同時也可忽略其中的空白符,
2, 3
-
格式輸入等同于2, 3 ,
,即将,等同于空白進行忽略2, 3
-
輸入會報錯,因為沒有找到2 3
,scanf認為,
是一個整體指派給了rows。2 3