如果我在C语言当中 想要修改密码但是退位会被当成一个数字输进去,我该怎么改写密码

 

为啥退位也会被输入哦,是不是你编译器的问题😂

参考一下:注意其中 if(c=='b')的处理即为对删除键的处理,通过输出\b\b的方式实现*号删除,同时输入的字符串要将当前字符设置为0,计数标志都要回退一位

# include <stdio.h>
# include <conio.h>     //getch()
# define MAX_PW_LEN 16  //密码最大长度
 
void getPassword(char * storePw, int maxPwLen)
{
    char c = '\0';          //存放用户键入的每个字符
    char * pc = storePw;    //为方便指向密码字符串中每个字符
    int pwlen = 0;          //当前password的长度

    while(1)
    {
        c = getch();
		if (c == '\b')
		{
			if (pwlen >0)
			{
				*pc = 0;
				pc--;
				pwlen--;
				printf("\b \b");   //退格退的是光标,用个空格覆盖,假装撤销打印的星号*
			}
			continue;
		}

        //如果用户按下回车符,停止循环
        if (c == '\r')
            break;

        //将用户输入的有效字符存入密码串,不考虑空字符'\0'
        if (pwlen >= 0 && pwlen < maxPwLen-1 && c)
        {
            *pc = c;
            pc++;
            pwlen++;
            putchar('*');
        }
    }
}

 

getch的功能是获取一个字符,所有字符都会被获取,修改了一段,参考着修改一下你的代码即可:

void xg()
{
	int i,j;
	char word[7],word1[7],word2[7],ch;
	system("cls");
	printf("请输入原密码");
	for (i=0;i<=5;i++)
	{
		ch = getch();
		if(ch <= 0x1f && ch != 0x08)
		{
			i--;
			continue;
		}else if (ch == 0x08 ) //退格
		{
			i--;
			system("cls");
			printf("请输入原密码");
			for(j=0;j<i;j++)
				putchar('*');
			
			continue;
		}else
		{
			putchar('*');
			word[i]=ch;
		}
		
	}
	word[6] = '\0';
	printf("\n");

	//下面的处理方式类似,自己添加一下吧

	
}