首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

怎么让输入密码显示*号

2012-12-31 
如何让输入密码显示*号大家好,今天弄一个c语言写的登录界面,要求输入密码时,显示*号,我试过用getch(),但提

如何让输入密码显示*号
大家好,今天弄一个c语言写的登录界面,要求输入密码时,显示*号,我试过用getch(),但提示错误,

加上#include<conio.h>后双显示没有这个头文件,在网上找了些方法也不奏效。

请教各位大侠,给小弟一段完整的代码,谢谢!
[解决办法]


#define PASSWDLEN   10
char ch;
char  password[PASSWDLEN] = {0};
int index = 0;

while(scanf("%c", &ch) != EOF)
{
    password[index++] = ch;
    printf("%c", '*');      
}
//写了一个大概思路,password可供后续比较实用。

[解决办法]
这个是我以前写的。但有个小缺陷:
换行后,不能回退:(
*/


int scan_password(char *str_buf, unsigned int size)
{
  int c;
  int i = 0;
  while ((c=getch()) != '\r')
  {
    if (c == '\b') {// backspace  
      if (i > 0) {
        int r;
      str_buf[--i] = '\0';
      
      r = putchar(c);
      r = putchar(' ');
      r = putchar(c);
      }
    }
    else {
      if (i < size - 1) {
      str_buf[i++] = c;
      putchar('*');
      }
    }
  }
  str_buf[i] = '\0';
  putchar('\r');
  putchar('\n');
  return i;
}


[解决办法]

#include<stdio.h>
#include<string.h>
#include<conio.h>
void setpassword()
{
    int i,n=0;
    char keyword1[20]={'\0'};
    char keyword2[20]={'\0'};
     
    while(1)
    {
        printf("请输入10位数的密码!:\n");
        for (i=0; i<10; i++)     
        {
            keyword1[i]=getch();
            if(keyword1[i]=='\b')  //如果输入了退格键,清除当前数据
            {
                i-=2;
                printf("\b \b");
 
            }
            else
            {
                printf("*");
            }


        }
 
        printf("\n请再输入一次密码:\n");  // 确认密码
        for (i=0; i<10; i++)      //再次输入10位数密码
        {
            keyword2[i]=getch();
            if(keyword2[i]=='\b')  //如果输入了退格键,清除当前数据
            {
                i-=2;
                printf("\b \b");
 
            }
            else
            {
                printf("*");
            }
        }
 
        if (strcmp(keyword1,keyword2)==0)
        {
            printf("\n设置密码成功!\n");
            break;
        }
        else 
        {
            printf("\n两次输入的密码不相同!\n");
        }
    }
}

int main(void)
{
setpassword();
return 0;

}

热点排行