1. 程式人生 > 其它 >C語言scanf()與getchar()解析

C語言scanf()與getchar()解析

scanf()

函式會根據引數中的轉義說明獲取對應的值的型別,在獲取值的時候會自動跳過前面的若干空格、製表符以及換行符(\n),如下圖所示。


scanf()只會獲取第一個符合轉移說明的值,如果沒有獲取到那麼原本輸入佇列中的值不會改變,仍舊在輸入佇列中。

scanf()只會回去1,而剩下的abc仍舊儲存在輸入佇列,被後面的getchar()獲取


getchar()

getchar()會獲取字元,包括空格、製表符換行符等等。


當輸入1的時候按下enter鍵表示輸入完成,由於我們是行緩衝,所以再按下enter的時候會將鍵盤緩衝送入輸入佇列,然後scnaf()去掉空白,並讀入一個1,但是此時輸入佇列中還剩下一個換行符,繼而被下面的getchar()獲取。

scanf("%*s")

這個函式被經常用來跳過非法的輸入,在輸入佇列中讀取當前的字串,直到遇到空白為止,應為scanf()用空白來隔開輸入。

首先看一下這個程式


這足以說明當scanf()在讀取輸入佇列中的值的時候如果和引數中的轉義說明不符並不會讀取該值並且會將其放回到輸入佇列中,所以造成死迴圈。

我們改進以下程式

利用scanf("%*s")清空當前的輸入佇列達到預想的效果。