为什么回显的汉字不对,或者说getch()两次如何得到的是同一个值。
为什么回显的汉字不对,或者说getch()两次怎么得到的是同一个值。。。。
新手,程序写的很乱,可能看的很不舒服 ,但是还是希望有人能帮忙解决下,本来汉字两个字符,希望是用两个getch()接下来然后输出回显,但是很奇怪的是两次getch()都是汉字的高位,弄不明白。。。
/***********************************************************************
函数名: Input_Text
函数功能:带回显的输入函数,明文-nFlag=1,密文-nFlag=0
参数说明:char *buf 指向用来保存输入的数据的地址
int nLength 控制输入数据长度
int nFlag 控制回显信息:明文-nFlag=1,密文-nFlag=0
返回值: 无
***********************************************************************/
int Input_Text(char *buf,int nLength,int nFlag)
{
int i = 0,j = 0;
char ch=0,ch1=0;
for(i=0;i>=0&&i<=nLength;i++)
{
if(nLength==i)
{
if(KEY_ENTER==getch())
{
return;
}
else if(KEY_BACK==getch())
{
if((unsigned char)*(buf+i-1)>=0xA1 && (unsigned char)*(buf+i-1)<=0xEF)
{
printf("\b \b\b \b");
i-=3;
continue;
}
else
{
printf("\b \b");
i-=2;
continue;
}
}
printf("\07");
i--;
continue;
}
*(buf+i)=getch();
if((*(buf+i)>='a' && *(buf+i)<='z') || (*(buf+i)>='A' && *(buf+i)<='Z') || (*(buf+i)>='0' && *(buf+i)<='9'))
{
if(1==nFlag)
{
printf("%c",*(buf+i));
}
else if(0==nFlag)
{
printf("*");
}
}
else if((unsigned char)*(buf+i)>=0xA1 && (unsigned char)*(buf+i)<=0xEF)
{
if(i>=0 && i<(nLength-1))
{
if(1==nFlag)
{
*(buf+i+1)=getch();
printf("%c%c",*(buf+i),*(buf+i+1));
}
else if(0==nFlag)
{
printf("*");
}
i++;
continue;
}
else
{
*(buf+i)=0;
printf("\07");
i--;
continue;
}
}
else if(KEY_ENTER==*(buf+i))
{
*(buf+i)=0;
return;
}
else if(KEY_BACK==*(buf+i))
{
if(0==i)
{
i--;
printf("\07");
continue;
}
else
{
if((unsigned char)*(buf+i-1)>=0xA1 && (unsigned char)*(buf+i-1)<=0xEF)
{
printf("\b \b\b \b");
*(buf+i-2)=0;
i-=3;
continue;
}
else
{
printf("\b \b");
*(buf+i-1)=0;
i-=2;
continue;
}
}
}
else
{
*(buf+i)=0;
printf("\07");
i--;
continue;
}
}
return 0;
}
------解决方案--------------------
仅供参考
新手,程序写的很乱,可能看的很不舒服 ,但是还是希望有人能帮忙解决下,本来汉字两个字符,希望是用两个getch()接下来然后输出回显,但是很奇怪的是两次getch()都是汉字的高位,弄不明白。。。
/***********************************************************************
函数名: Input_Text
函数功能:带回显的输入函数,明文-nFlag=1,密文-nFlag=0
参数说明:char *buf 指向用来保存输入的数据的地址
int nLength 控制输入数据长度
int nFlag 控制回显信息:明文-nFlag=1,密文-nFlag=0
返回值: 无
***********************************************************************/
int Input_Text(char *buf,int nLength,int nFlag)
{
int i = 0,j = 0;
char ch=0,ch1=0;
for(i=0;i>=0&&i<=nLength;i++)
{
if(nLength==i)
{
if(KEY_ENTER==getch())
{
return;
}
else if(KEY_BACK==getch())
{
if((unsigned char)*(buf+i-1)>=0xA1 && (unsigned char)*(buf+i-1)<=0xEF)
{
printf("\b \b\b \b");
i-=3;
continue;
}
else
{
printf("\b \b");
i-=2;
continue;
}
}
printf("\07");
i--;
continue;
}
*(buf+i)=getch();
if((*(buf+i)>='a' && *(buf+i)<='z') || (*(buf+i)>='A' && *(buf+i)<='Z') || (*(buf+i)>='0' && *(buf+i)<='9'))
{
if(1==nFlag)
{
printf("%c",*(buf+i));
}
else if(0==nFlag)
{
printf("*");
}
}
else if((unsigned char)*(buf+i)>=0xA1 && (unsigned char)*(buf+i)<=0xEF)
{
if(i>=0 && i<(nLength-1))
{
if(1==nFlag)
{
*(buf+i+1)=getch();
printf("%c%c",*(buf+i),*(buf+i+1));
}
else if(0==nFlag)
{
printf("*");
}
i++;
continue;
}
else
{
*(buf+i)=0;
printf("\07");
i--;
continue;
}
}
else if(KEY_ENTER==*(buf+i))
{
*(buf+i)=0;
return;
}
else if(KEY_BACK==*(buf+i))
{
if(0==i)
{
i--;
printf("\07");
continue;
}
else
{
if((unsigned char)*(buf+i-1)>=0xA1 && (unsigned char)*(buf+i-1)<=0xEF)
{
printf("\b \b\b \b");
*(buf+i-2)=0;
i-=3;
continue;
}
else
{
printf("\b \b");
*(buf+i-1)=0;
i-=2;
continue;
}
}
}
else
{
*(buf+i)=0;
printf("\07");
i--;
continue;
}
}
return 0;
}
------解决方案--------------------
仅供参考
#include <conio.h>
#include <stdio.h>
char pw[40];
int i,ch;
FILE *f;
void main() {
cprintf("\r\nPassword:");
i=0;pw[i]=0;
while (1) {
ch=getch();
if (ch==13
------解决方案--------------------
i>=39) break;
switch (ch) {
case 27:
cprintf("\rPassword: %40s"," ");
cprintf("\rPassword: ");
i=0;pw[i]=0;
break;
case 8:
if (i>0) {
i--;
pw[i]=0;
cprintf("\b \b");
}
break;
default:
pw[i]=ch;
i++;
pw[i]=0;
cprintf("*");
break;
}
}
cprintf("\r\n");
f=fopen("password.txt","w");
fprintf(f,"%s\n",pw);
fclose(f);
}