C++中putchar與getchar函數(shù)的細節(jié)及運用
在C語言中,輸入和輸出除了用printf和scanf外,另外還有用于輸入字符的函數(shù)為getchar()函數(shù),用于輸出字符的函數(shù)為putchar()函數(shù)。
功能解釋如下:


下面用例子來說明函數(shù)的用法
#include <stdio.h>
int main()
{
int ch = 0;
while ((ch = getchar()) != EOF)
putchar(ch);
return 0;
}
結(jié)果:

可以看出,當按下鍵盤上的回車鍵時,getchar函數(shù)會讀取到屏幕中輸入的字符和回車字符'\n',而putchar函數(shù)會將這個字符再次打印在屏幕上并顯示出回車的效果。而當按下鍵盤上的ctrl+z鍵的時候,就會讓getchar讀取到EOF(意味著讀取字符失敗),此時getchar就會讀取結(jié)束。
應(yīng)用:
#include <stdio.h>
int main()
{
char password[20] = { 0 };
printf("請輸入密碼:>\n");
scanf("%s", password);
printf("請確認密碼<Y/N>:");
int ch = getchar();
if (ch == 'Y')
{
printf("確認成功!");
}
else
{
printf("確認失??!");
}
return 0;
}

整體上看并沒有什么語法上的錯誤,但為什么會出現(xiàn)上面的情況呢?這里就要重點說明一下getchar函數(shù)的讀取細節(jié)了。
如圖:

首先scanf會把空格前的字符(即“12345”)都獲取,此時緩沖區(qū)中就會剩下“ (空格)avcde”,而getchar函數(shù)就會將剩下的第一個字符讀取,讀取的第一個位“(空格)”,不為“Y”,所以顯示“確認失敗”;如何解決這一問題呢?就需要將剩下的字符都獲取完(包括“\n”,原因是當在鍵盤上按下回車鍵時,系統(tǒng)就會默認輸入一個“\n”),再輸入后才會讀取成功。
改進如下:
char password[20] = { 0 };
printf("請輸入密碼:>\n");
scanf("%s", password);
printf("請確認密碼<Y/N>:");
int tmp = 0;
//巧妙的運用循環(huán)來清理緩沖區(qū)內(nèi)的多個字符
while ((tmp = getchar()) != '\n')//當獲取到'\n'時,循環(huán)結(jié)束
{
;
}
int ch = getchar();
if (ch == 'Y')
{
printf("確認成功!");
}
else
{
printf("確認失??!");
}

此時就能按照正常的邏輯運行了。
以上就是對getchar函數(shù)一些小細節(jié)的理解,如有不當,歡迎指正!
到此這篇關(guān)于C++中putchar與getchar函數(shù)的細節(jié)及運用的文章就介紹到這了,更多相關(guān)putchar與getchar函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

