以字符序列的方式输出到计算机显示器屏幕上,那么我的程序内存作为数据源而显示器驱动程序作为数据目标,如果数据源直接对数据目标发送数据的话。数据目标获得第一个字符,便将它显示。然后从端口读取下一个字符,可是这时就不能保证数据源向端口发送的恰好是第二个字符(也许是第三个,而第二个已经在数据目标显示时发送过了)。这样的话就不能保证输出的数据能完整的被数据目标所接受并处理。
为了解决这个问题,我们需要在数据源与数据目标中间放置一个保存完整数据内容的区域,那就是 “缓冲区”。这样的话, 数据源只是从缓冲区中依次取出下一个数据。从而保证了数据发送的完整性,同时也提高了程序的效率。当然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;
}