日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言中getchar

發布時間:2023/12/16 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。