C語言數據輸入scanf( )和getchar( )

格式化輸入函數scanf( )

scanf( )功能:

按照指定的格式讀入鍵盤上輸入的若干個任意類型的數據,存入到argument參數所指向的內存單元,函數返回值爲讀入並賦給argument的數據個數,出錯則返回0。

scanf( )使用形式:

scanf("格式字符串",輸入項首地址列表);
scanf( )函數執行時將輸入的數據流按指定格式轉換爲數據,存入相應的存儲單元中。

格式字符串:

%[*][width][F|N|h|l]type

(1)類型字符type:

類型字符 功能說明
d或i 以十進制有符號形式輸入整數
u 以十進制無符號形式輸入整數
o 以八進制無符號形式輸入整數
x或X 以十六進制形式輸入整數
f 以小數形式輸入實數
c 輸入單個字符
s 輸入一個字符串
e或E,g或G 與f作用相同,e,g可替換f

(2)寬度指示符width:
width是一個十進制正整數的形式,表示該輸入項最多可接收的字符個數。也就是說,讀取輸入數據中相應的n位,按需要的位數賦給相應的變量,多餘部分被捨棄。但讀取過程中如遇到空格、Tab或其他不可轉換的字符,輸入個數可少於寬度指示。

(3)賦值抑制字符"*":
表示本輸入項對應的數據讀入後,不賦給相應的變量,該變量的數據將由下一個格式指示符指定的數據輸入。

scanf( )函數的數據輸入操作:

(1)輸入多個數據的分隔處理:如果在格式字符串中不包含除了格式指示符之外的普通字符,則在輸入多個數據時,可以使用空格隔開,或者用Tab鍵分開,或者以回車鍵隔開。
(2)當“格式字符串”中出現普通字符時,普通字符不會顯示,必須在規定輸入時原樣輸入。
(3)當scanf( )函數中的格式字符串中出現轉義字符(如"\n"),系統並不把它當轉義字符解釋,從而產生一個控制操作,而是將其視爲普通字符,所以也要原樣輸入。
(4)輸入數據時,遇到以下情況,系統認爲該數據輸入結束:

  • 遇到空格、回車鍵或者Tab鍵。
  • 遇到輸入域寬度結束。
  • 遇到非法輸入。例如在輸入數值數據時,遇到字母等非數值符號(數值符號僅由數字字符0~9、小數點和正負號構成)。

(5)使用格式說明符"%c"輸入單個字符時,空格和轉義字符均作爲有效字符被輸入。

單個字符的輸入函數getchar( )

getchar( )功能:

從標準輸入設備(鍵盤)輸入一個字符,並返回輸入字符的ASCII值。

用戶輸入的字符被存放在鍵盤緩衝區中.直到用戶按回車爲止(需要注意的是:回車字符也放在緩衝區中.)
當用戶鍵入回車之後,getchar纔開始從stdio流中每次讀入一個字符.且將用戶輸入的字符回顯到屏幕.
如用戶在按回車之前輸入了不止一個字符(回車也算),其他字符會保留在鍵盤緩存區中,等待後續getchar調用讀取.也就是說,後續的getchar調用不會等待用戶按鍵(所以第二次讀取到回車字符纔算讀完緩衝區),而直接讀取緩衝區中的字符,直到緩衝區中的字符讀完爲後,纔等待用戶按鍵.

注意:

  • getchar( )只能用於單個字符的輸入,一次只能輸入一個字符。
  • 使用getchar( )輸入字符是,需按下回車鍵表示輸入結束。
  • getchar( )將回車也作爲一個輸入,所以輸入連續的兩個數據時需要注意。

  • 如果只是想輸入一個字符並輸出,也可以使用在putchar( )函數中嵌入getchar( )函數的形式。putchar(getchar( ));
  • 參見http://www.cnblogs.com/zhenzhen123/p/4972745.html

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