C语言中getchar
getchar函數簡介
getchar()函數的作用是從計算機終端(一般為鍵盤)獲取一個無符號字符。getchar()函數只能接收一個字符,其函數值就是從輸入設備獲取到的字符。
函數原型:int getchar(void);? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?返回類型為int,參數為void
頭 ?文 ?件:#include<stdio.h>
返 ?回 ?值: 1、getchar返回的是字符的ASCII碼值(整數)。
? ? ? ? ? ? ? ? ? ?2、getchar在讀取結束或者失敗的時候,會返回EOF。
? ? ? ? ? ? ? ? ? ? ? ? (EOF意思是end of file,本質上是-1)
讀取方式:只能輸入字符型,輸入時遇到回車鍵\n才從緩沖區依次提取字符。
結束輸入的方式:以Enter(\n)結束輸入(空格不結束),接受空格符。
舍棄回車符的方法:以Enter(\n)結束輸入時,接受空格,會舍棄最后的回車符。
getchar和scanf同時使用時會出現的問題
這時我們先看一個程序
#include<stdio.h> int main() {char password[20] = { 0 };int ch = 0;printf("請輸入密碼:>");scanf("%s", password);//輸入123456 printf("請確認密碼(Y/N):>");ch = getchar();if (ch == 'Y')printf("確認成功\n");elseprintf("確認失敗\n");return 0; }我們發現在輸入密碼123456后并未確認密碼,編譯直接就顯示確認失敗,這是為什么呢??
我們要先清楚getchar讀取數據的底層邏輯:
程序執行到getchar()函數時,自動從輸入緩沖區中去找字符,如果輸入緩沖區中沒有字符的話,那么就等待用戶輸入字符,此時用戶使用鍵盤輸入的字符,被輸入到輸入緩沖區中,鍵盤輸入字符的時候首先進入輸入緩沖區,然后getchar()函數獲得的字符是從輸入緩沖區中提取的且每次只能提取一個字符。
輸入123456\n后程序執行到scanf,scanf從緩沖區拿走了123456,此時緩沖區還有一個\n,當程序繼續執行到getchar時,getchar會因為緩沖區內還有東西而直接獲取緩沖區的\n,所以并未確認密碼就會顯示確認失敗,因為getchar已經在緩沖區找到一個字符了,不需要再等待用戶輸入字符。
那么這個問題怎么解決呢?
我們可以通過清理緩沖區的方法來解決。
#include<stdio.h> int main() {char password[20] = { 0 };int ch = 0;printf("請輸入密碼:>");scanf("%s", password);//輸入123456//消除\n - 清理緩沖區while (getchar()!='\n'){;}printf("請確認密碼(Y/N):>");ch = getchar();if (ch == 'Y')printf("確認成功\n");elseprintf("確認失敗\n");return 0; }考慮到用戶輸入可能會輸入空格,而scanf遇到空格就不會往后面讀了,所以使用一個循環來清空緩沖區,來拿走空格和\n及其中間的數據
我們可以看到在程序中又加了一個getchar,這個getchar的作用就是拿走緩沖區中的\n,這樣就能解決getchar自動獲取字符直接確認失敗的問題了
總結
以上是生活随笔為你收集整理的C语言中getchar的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OFDM 调制系统框图 OFDM
- 下一篇: RRU入门学习