C++中putchar與getchar函數的細節及運用

在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函數一些小細節的理解,如有不當,歡迎指正!

到此這篇關於C++中putchar與getchar函數的細節及運用的文章就介紹到這瞭,更多相關putchar與getchar函數內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: