在C語言中,輸入和輸出除了用printf和scanf外,另外還有用于輸入字符的函式為getchar()函式,用于輸出字符的函式為putchar()函式,
功能解釋如下:


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

可以看出,當按下鍵盤上的回車鍵時,getchar函式會讀取到螢屏中輸入的字符和回車字符’\n’,而putchar函式會將這個字符再次列印在螢屏上并顯示出回車的效果,而當按下鍵盤上的ctrl+z鍵的時候,就會讓getchar讀取到EOF(意味著讀取字符失敗),此時getchar就會讀取結束,
應用:
#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;
}

整體上看并沒有什么語法上的錯誤,但為什么會出現上面的情況呢?這里就要重點說明一下getchar函式的讀取細節了,
如圖:

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

此時就能按照正常的邏輯運行了,
以上就是對getchar函式一些小細節的理解,如有不當,歡迎指正!
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/290332.html
標籤:其他
