| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6344 人关注过本帖
标题:求助c语言怎样让输入的密码可回删,已经变成星号了
只看楼主 加入收藏
此刻不爽
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2012-12-16
结帖率:50%
收藏
已结贴  问题点数:5 回复次数:8 
求助c语言怎样让输入的密码可回删,已经变成星号了
#include<stdio.h>
#include<string.h>
#include<conio.h>

void main()
{
//char name代表用户名 mm代表登陆密码 a代表输入的密码
    char name[20], mm[3]={'y','a','n'},a[6];
    int i,g;

    printf("\n\n\n\t\t\tStudent Manager");
    for(i=0;i<3;i++)
{    printf("\n\n\t\tUser Name:");
    scanf("%s",&name);

    if(strcmp(name,"grace")==0)
    { printf("\t\tPlease input your password:");
for(g=0;g<6;g++)

   {
        a[g] = getch();  /*逐次赋值,但不回显*/
        if (a[g] == '\x0d')/*回车则终止循环*/
        {
   a[g]='\0';
            break;
        }
        printf("*");       /*以星号代替字符个数*/
    }
    break;}
else
{
    printf("\t\tThe wrong user");
   
}
}
   
   











}
搜索更多相关主题的帖子: 密码 password include 用户名 
2013-03-03 11:09
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:2 
检测到 '\b'(退格),即输出 '\b',再打印一个空格覆盖已输出的星号,再输出'\b',思路大致是这个


[fly]存在即是合理[/fly]
2013-03-03 13:30
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:2 
回复 2楼 azzbcc
你觉得他会getch()吗?

授人以渔,不授人以鱼。
2013-03-03 14:04
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
他代码里面有getch(),应带会用吧


[fly]存在即是合理[/fly]
2013-03-03 14:28
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
如果他用TC,就不需用你所说的方法;如果不是,VC中也没有getch(),MS用的是_getch(),非标准扩展库,别的编译器有没有就不知道了。而且,我看他检测getch()返回值的方式,应该是没吃透这个函数的。

授人以渔,不授人以鱼。
2013-03-03 14:34
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
TC是直接写屏的,用gotoxy()定位光标比用输出\b字符退格快得多。

btw: 如果他真要让退格键起作用,那个for()循环就是错的。6位的密码,容许退格,循环次数就不止6次,无限次都有可能。

授人以渔,不授人以鱼。
2013-03-03 14:40
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你再看他的代码,只有在6次循环之内按下回车,才会在字符串末尾添加'\0',但如果用户不按回车,而是输入了7次按键,被for()循环退出,此时字符串就没有'\0'结束符,后果可想而知。其实还有别的东西他想都没想过,按几下光标键和PgUp/PgDn/Home/End之类的试试有什么现象。

[ 本帖最后由 TonyDeng 于 2013-3-3 14:52 编辑 ]

授人以渔,不授人以鱼。
2013-03-03 14:49
好聚好散
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:138
专家分:123
注 册:2012-12-4
收藏
得分:2 
scanf("%s",&name);
应该用gets(name);

无节操,无真相
2013-03-03 14:55
Zlian无情
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2015-10-5
收藏
得分:0 
void    inputPW(char * s,int len)        //自己写的密码输入的函数
 {
    int i;
    fflush(stdin);                 //清输入流 跟flushall()类似
    for(i=0; ;i++)
    {
        s[i]=getch();
        if(s[i]==13)                  //输入结束 不能用=='\n'来判断!!
                               //因为对于回车来说getchar()='\n'=10;而getch()=13 !='\n' 这个要知道!
            break;
        if(s[i]==8 && i>0)             //如果用户按退格键 并且要有格可退时候
        {
            printf("\b \b");                   //显示退一格
            i=i-2;                          //输入数据退2(因为for循环体会加1 所以实际就是退了1)
        continue;
        }
    if(i==len)
    {i--; continue;}
    printf("*");
    }
    s[i]='\0';                  //末尾补\0 所以该密码实际有效长度为i-1;定义有效长为len 实际定义的串长为len+1
    }
2015-10-05 14:22
快速回复:求助c语言怎样让输入的密码可回删,已经变成星号了
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026890 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved