17.05.20 總結

   以字符序列的方式輸出到計算機顯示器屏幕上,那麼我的程序內存作爲數據源而顯示器驅動程序作爲數據目標,如果數據源直接對數據目標發送數據的話。數據目標獲得第一個字符,便將它顯示。然後從端口讀取下一個字符,可是這時就不能保證數據源向端口發送的恰好是第二個字符(也許是第三個,而第二個已經在數據目標顯示時發送過了)。這樣的話就不能保證輸出的數據能完整的被數據目標所接受並處理。

  爲了解決這個問題,我們需要在數據源與數據目標中間放置一個保存完整數據內容的區域,那就是 “緩衝區”。這樣的話, 數據源只是從緩衝區中依次取出下一個數據。從而保證了數據發送的完整性,同時也提高了程序的效率。當然getch(),getche()沒有用到緩衝區。


getch()輸入單個字符而不顯示出來,除非添加putchar()或printf()語句 (可用於密文輸入)

getche()輸入單個字符並顯示出來(這一點同getchar(),但getchar()可輸入字符串)


密文輸入例子

#include <stdio.h>
#include <conio.h>
#include <string.h>
int main()
{
	char ch;
	char a[6] = "abcde";
	char b[10];
	printf("User : Irelia\nPassword : ");
	int i = 0;
	while(1)
	{
		ch = getch();
		if(ch=='\r')		//	'\r'表示爲回車,而'\n'包含兩個動作,一個是回車,一個是換行。
			break;			//	再說鍵盤上的回車鍵是對應'\n'的,即爲回車和換行兩個動作,而你用getch()來接收字符只能接收到一個動作,
		else				//	即回車這個動作,表示爲'\r',換行將被下一次getch()接收,但是無論如何也不會等於'\n'的,所以會無限循環了 
		{
			b[i] = ch;
			putchar('*');
		}
		i++;
	}
	if(strcmp(a,b)==0)
		printf("\nWelcome back,Irelia!");
	else 
		printf("\nThe password is error!");
	getchar();
	return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章