c语言密码输入,屏幕回显*并按回车显示输入密码

RT如何用循环写一个输入任意密码回显*且按回车显示输入密码的程序?本人初学望见谅!... RT
如何用循环写一个输入任意密码回显*且按回车显示输入密码的程序?

本人初学
望见谅!
展开
 我来答
hi_xjy
2010-11-11 · TA获得超过2468个赞
知道大有可为答主
回答量:987
采纳率:0%
帮助的人:1525万
展开全部

//getch()函数:从控制台无回显地取一个字符,返回从键盘上读取到的字符

//可以参考 http://baike.baidu.com/view/751663.htm

#include <stdio.h>

#include <conio.h>

void main()

{

 char ch,str[100];

 int i=0;

 while((ch=getch()) != '\r') //按下的字符赋值给ch,当按下回车退出

 {

  putchar('*'); //每按下一个字符输出一个*

  str[i++] = ch; //把字符存入数组

 }

 str[i] = '\0'; //数组的末端加上字符串结束标志

 printf(

参考资料: http://baike.baidu.com/view/751663.htm

听不清啊
高粉答主

推荐于2017-09-03 · 说的都是干货,快来关注
知道顶级答主
回答量:7.8万
采纳率:89%
帮助的人:1.9亿
展开全部
#include<stdio.h>
#include<conio.h>
int main()
{char pswd[21],*p=pswd;
 while((*p=getch())!='\r')
 {putch('*');p++;}
 *p='\0';
 printf("\n输入的密码是:\n%s\n",pswd);
 return 0;
}

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
悄逝的流年
2017-08-24 · TA获得超过167个赞
知道小有建树答主
回答量:179
采纳率:20%
帮助的人:39.3万
展开全部
#include <stdio.h>
#include<conio.h>           // getch()函数头文件
#define  PASSWDMAX     50   // 最大可输入与回显50个字符的密码

int main()
{
    char passwd[50] = {0};
    printf("请输入密码:\n");
    int i = 0;
    for (i = 0; i < PASSWDMAX; i++)
    {
            // getch为不回显输入函数,注意头文件,以及库是否存在
        if((passwd[i] = getch()) != '\n')
        {        
            printf("*");
        }
        else
        {
            for(; i >= 0; i--)
                printf("%c", '\b');              // 退格,删掉*字符
            printf("%s\n", passwd);              // 显示密码
        }
    }
    if (i >= PASSWDMAX)
    {
        printf("输入密码长度不符!\n");
    }
    return 0;
}

手边没有编译器,所以没有验证,有问题请回复。
=================================================================================
早上验证时发现我的计算机没有这个库,所以可能需要自己实现getch(),在linux环境下可以调用
tcgetattr()、tcsetattr()函数来实现在输入时不显示字符即可。

#include <stdio.h>
#include <termios.h>
#include <unistd.h>
#include <assert.h>
#include <string.h>

#define  PASSWDMAX     50   // 最大可输入与回显50个字符的密码
int getch(void) 
{
        int c=0;
        struct termios org_opts, new_opts;
        int res=0;
        //-----  store old settings -----------
        res=tcgetattr(STDIN_FILENO, &org_opts);
        assert(res==0);
        //---- set new terminal parms --------
        memcpy(&new_opts, &org_opts, sizeof(new_opts));
        new_opts.c_lflag &= ~(ICANON | ECHO | ECHOE | ECHOK | ECHONL | ECHOPRT | ECHOKE | ICRNL);
        tcsetattr(STDIN_FILENO, TCSANOW, &new_opts);
        c=getchar();
            //------  restore old settings ---------
        res=tcsetattr(STDIN_FILENO, TCSANOW, &org_opts);assert(res==0);
        return c;
}

int main()
{
    char passwd[50] = {0};
    printf("请输入密码:\n");
    int i = 0;
    for (i = 0; i < PASSWDMAX; i++)
    {
        if((passwd[i] = getch()) != '\n')
        {  
            printf("*");
        }
        else
        {
            for(; i >= 0; i--)
                printf("%c", '\b');              // 退格,删掉*字符
            printf("%s\n", passwd);              // 显示密码
            break;
        }
    }
    if (i >= PASSWDMAX)
    {
        printf("输入密码长度不符!\n");
    }
    return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
海上丝路开新篇
2010-11-11 · TA获得超过654个赞
知道小有建树答主
回答量:590
采纳率:0%
帮助的人:616万
展开全部
首先你要注意这个小程序的重点是什么:
1。确定对方输入的字符数目。你需要scanf
2。保存输入字符的位置,以及大小。
如果即时需要显示星号,也去putchar(),getchar()比较println()好用
3。程序的完整性,可进入性
这里面你不仅需要for循环,DO循环,switch语句不可少
说了这么多,希望能够授之以渔
祝你学习愉快!
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wchyumo2011
2017-09-02 · TA获得超过2万个赞
知道大有可为答主
回答量:5810
采纳率:79%
帮助的人:2754万
展开全部

使用getch()函数,改函数获取字符时不输出到屏幕,在获取到字符后可以使用printf("*")输出星号,如

while(ch=getch()){
    printf("*");
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式