诶本小女子,有个超级简单的c语言问题,输入密码时密码显示为****号。

glkhkh 2018-08-01 06:14:37
输入密码时密码显示为****号。希望大佬们用最简单的代码回答一下
就像这样简单的形式:
#include <stdio.h>
#include <conio.h>
int main ()
{
int ch;

while ((ch = getch ()) != '\r') {
printf("*");
}

return 0;
}


假如密码为:abc123 倩倩谢谢啦
...全文
844 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
smwhotjay 2018-08-15
  • 打赏
  • 举报
回复
肯定能实现,
zhangchm2018 2018-08-14
  • 打赏
  • 举报
回复

// password.c -- 输入密码程序
#include <stdio.h>
#include <conio.h> // 提供 getch() 原型
#include <string.h> // 提供 strcmp() 原型

#define PLEN 21 // 储存密码的数组长度
#define BACKSPACE '\b' // 退格键
#define ENTER '\r' // 回车键

// 储存正确密码的数组
const char correct_password[PLEN] = "abc123";

int main(void)
{
char ch;
char input_password[PLEN] = ""; // 初始化数组为空
int index;
int isright = 0;

/*
** 当第一次与密码错误时进入循环,当且仅当密码正确时不进入循环
*/
while ( !isright )
{
index = 0;
puts("请输入密码(ENTER键确认输入):");
while ( (ch = getch()) != ENTER )
{
/*
** 当且仅当 input_password 数组不为空时,按下退格键有效
*/
if ( index > 0 && ch == BACKSPACE )
{
index--;
input_password[index] = '\0';
printf("\b \b"); // 清除上一个输出的 *
}
else if (index < (PLEN - 1))
{
/*
** 当 input_password 数组未满时,按下非退格键则储存密码
*/
input_password[index] = ch;
index++;
putchar('*');
}
input_password[index] = '\0';
}
putchar('\n');

/*
** 比较 input_password 与 correct_password 的内容,
** 内容相同,则输出密码正确;否则,输出密码错误,
** 并提示重新输入
*/
if ( strcmp( input_password, correct_password ) == 0 )
{
puts("密码正确!");
isright = 1;
}
else
puts("密码错误!请重新输入密码:");
}
puts("按任意键退出...");

getchar();
return 0;
}
我的女神 2018-08-14
  • 打赏
  • 举报
回复
引用 14 楼 zhangchm2018 的回复:
[quote=引用 13 楼 kakasi88 的回复:]
楼主的意思是用最简单的c语言知识来搞一下,结果大家就把网上的帖子复制过来,就导致我这种渣渣就看不下了,能不用文件和指针吗?

楼主一开始用作例子的简单程序有什么不足?[/quote]

不能输错,没法退格。
junityQAQ 2018-08-13
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <string.h>
#include <conio.h>
char ch,pass[11];
int i=0;
int main()
{
ch=getch();
while(ch!='\n')
{
pass[i]=ch;
printf("*");
i++;
ch=getch();
}
if(strcmp(pass,"abc123"==0)printf("\n密码正确!");
else printf("密码错误!");
return 0;
}
zhangchm2018 2018-08-12
  • 打赏
  • 举报
回复
引用 13 楼 kakasi88 的回复:
楼主的意思是用最简单的c语言知识来搞一下,结果大家就把网上的帖子复制过来,就导致我这种渣渣就看不下了,能不用文件和指针吗?

楼主一开始用作例子的简单程序有什么不足?
glkhkh 2018-08-12
  • 打赏
  • 举报
回复
楼主的意思是用最简单的c语言知识来搞一下,结果大家就把网上的帖子复制过来,就导致我这种渣渣就看不下了,能不用文件和指针吗?
小熊之怒 2018-08-11
  • 打赏
  • 举报
回复
引用 3 楼 zhao4zhong1 的回复:
仅供参考:
#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);
}


才疏学浅,看不懂。
我的女神 2018-08-10
  • 打赏
  • 举报
回复

#define BACKSPACE 8

void get_password( char buffer[64], int buflen )
{
int i = 0;
char letter = 0;

// 最多可输入31个字符,最后一个留个'\0'
while ( ( i < buflen - 1 ) && ( letter != '\r' ) )
{
letter = getch();

if ( letter == BACKSPACE )
{
if ( i > 0 )
{
buffer[--i] = 0;
putchar( BACKSPACE );
putchar( ' ' );
putchar( BACKSPACE );
}
else
{
putchar( 7 );
}
}
else if ( letter != '\r' )
{
buffer[i++] = letter;
putchar( '*' );
}
}

buffer[i] = '\0';
}
我的女神 2018-08-10
  • 打赏
  • 举报
回复
#define BACKSPACE 8

void get_password( char buffer[64], int buflen )
{
int i = 0;
char letter = 0;

while ( ( i < buflen - 1 ) && ( letter != '\r' ) )
{
letter = getch();

if ( letter == BACKSPACE )
{
if ( i > 0 )
{
buffer[--i] = 0;
putchar( BACKSPACE );
putchar( ' ' );
putchar( BACKSPACE );
}
else
{
putchar( 7 );
}
}
else if ( letter != '\r' )
{
buffer[i++] = letter;
putchar( '*' );
}
}

buffer[i] = '\0';
}
赵4老师 2018-08-07
  • 打赏
  • 举报
回复
竞天问 2018-08-07
  • 打赏
  • 举报
回复
引用 3 楼 zhao4zhong1 的回复:
仅供参考:
#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);
}

对着ASCII码表才能看懂……
lizh1009 2018-08-06
  • 打赏
  • 举报
回复
linux如果想sudo时显示密码为*,可以改/etc/sudoers配置文件,在env_reset后面加,pwfeedback
lizh1009 2018-08-06
  • 打赏
  • 举报
回复
定义一个数组,每输入一个字符就将这个字符保存在这个数组里,然后打印一个*号
田子方 2018-08-06
  • 打赏
  • 举报
回复
引用 3 楼 zhao4zhong1 的回复:
仅供参考:
#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);
}
赵老师是我见过最吊的,没有之一,赵4是我们的信仰
赵4老师 2018-08-02
  • 打赏
  • 举报
回复
仅供参考:
#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);
}
glkhkh 2018-08-01
  • 打赏
  • 举报
回复
额,答非所问
ForestDB 2018-08-01
  • 打赏
  • 举报
回复
问题是挺简单的,只不过这个问题跟C语言无关,跟系统有关。

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧