[C语言] 混合or连续使用getchar,scanf所出现的错误
[C語言] 混合or連續使用getchar,scanf所出現的錯誤
getchar
getchar()的作用是從系統隱含指定的輸入設備(即終端鍵盤)輸入一個字符,按回車鍵表示輸入結束。
測試getchar的具體用法
getchar()每次只能讀取一個字符,我們知道如果我們一次性輸入多個字符,getchar()只會讀取第一個字符,剩余的字符保存到標準緩沖區里
我們用于測試的源代碼如下:
可以看到程序直接跳過了第二條getchar()的輸入而取出標準緩沖區里的b輸出
如果我們只輸入一個字符呢?
我們以為程序應該是這樣的情況
光標停留在第二個getchar()等待我們輸入第二個值,然而實際情況卻是這樣的
INPUT: a OUTPUT: Please press a key and then press enter:a You pressed:a Please press a key and then press enter: You pressed:程序仍跳過了第二個getchar()直接結束了,看似好像第二個getcher()既沒輸入又沒輸出而程序就這樣結束了
其中的原因就在于getchar()是從標準緩沖區中讀取輸入的字符的,所以像上面那樣寫的情況下,字符型變量b接收的就是輸入a之后輸入的回車鍵
我們可以經行如下測試來消除那個回車鍵
用fflush(stdin);語句的作用可不僅僅能消除回車鍵,他能消除存在緩沖區里的所有字符,性質優良
INPUT:abczxc OUTPUT:Please press a key and then press enter:abcYou pressed:aPlease press a key and then press enter:zxcYou pressed:zscanf
scanf的作用是按指定格式要求和數據類型,讀入若干數據給的相應的變量
借用我們用來測試getchar的代碼稍作改動,其得到的結果與getchar一樣
scanf(“Space%c”,&b);用Space來抵消掉那個回車鍵;
但上述是字符型的變量,現在我們對int型變量經行測試
int a,b;printf(" Please press a key and then press enter:");scanf("%d",&a);printf(" You pressed:");printf("%d",a);printf("\n Please press a key and then press enter:");scanf("%d",&b);printf(" You pressed:");printf("%d",b); INPUT:1224 OUTPUT:Please press a key and then press enter:12You pressed:12Please press a key and then press enter:24You pressed:24這樣的情況是我們見的最多的,經行兩次輸入
又如果這樣
預料之中
混合使用getchar和scanf
int a,b;printf(" Please press a key and then press enter:");a=getchar();printf(" You pressed:");putchar(a);printf("\n Please press a key and then press enter:");scanf("%d",&b);printf(" You pressed:");printf("%d",b);效果跟前面基本相似,就是注意getchar只能讀取一個字符
然而
通過debug窗口,我們可以看到8是b的初始化隨機數據,如果在初始化的時候int b=0;第二個press出來的就是0 ,這是怎么回事呢?
我們注意到scanf("%d",&b);當輸入類型與制定的數據類型不統一時,將無法經行數據輸入
本人小菜一枚,學識淺薄,言辭簡陋,如有不正確或是可以改進之處,歡迎大家指出,小生不勝感激!
總結
以上是生活随笔為你收集整理的[C语言] 混合or连续使用getchar,scanf所出现的错误的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 纯前端实现—点一个小圆圈变四个动画效果
- 下一篇: ThreadLocal入门