C语言之密码验证器

一、要求
        用户输入密码,要求:
            1.长度>= 8
            2.包含至少一个大写字母
            3.包含至少一个数字
            4.最多允许三次输入尝试
     若满足条件输出“验证成功”, 否则提示具体原因

输入:Abc123

输出:密码长度不足8位!剩余尝试次数:2

话不多数,上代码:

#include <stdio.h>

int main()
{
for (int h = 2; h >= 0; h--)
{
	int A = 0;//判定有无大写字母
	int num = 0;//判定有无数字
	char arr[100];
	int len = 0;
	scanf("%s" , arr);

	int len_arr = strlen(arr);
  

	if ( len_arr < 8)
	{
		printf("密码长度不足8位!剩余尝试次数%d\n", h);
		continue;
	}

	for (int j = 0; j < len_arr; j++)
	{
		if (arr[j] >= 65 && arr[j] <= 90)
		{
			A = 1;
		}
	
		if (arr[j] >= 48 && arr[j] <= 57)
		{
			num = 1;
		}
		
	}

	if (A == 1 && num == 1)
	{
		printf("设置成功!\n");
		break;
	}
	if (A == 0)
	{
		printf("密码中没有大写字母!剩余尝试次数%d\n", h);
	}
	if (num == 0)
	{
	
	printf("密码中没有数字!剩余尝试次数%d\n", h);
    }

}

return 0;
}

这个代码在VS2022中运行时成功的

二、感悟和收获

笔者在编写这个代码的时候,一开始是用for循环来输入密码的就是这样:

int i = 0;
for( i = 0; 1 ; i++)
{
scanf("%c" , &arr[i]);
if (arr[i] == '\n')
break;
}

但后来经过测试,发现不管怎样,i = 0, 于是我又进行了下列代码:

char arr[100];
int i = 0;
for (i = 0; 1; i++)
{
	scanf("%c", &arr[i]);
	printf("%c", arr[i]);
	if (arr[i] == '\n');
	break;
}

不管是输入123456,还是输入12 34 6 ,所打印出来的就都是 1 ,那么问题很显然了,break跳出的语句那块不能这么写,这样写还是我看到VS自带的ai提示写的,看来以后不能看提示了,还有,哪位大佬知道VS的ai如何关闭啊,每次写代码都感觉这个ai很烦人。

后来把代码又改成这样:

char arr[100];
int i = 0;
for (i = 0; i<5; i++)
{
	scanf("%c", &arr[i]);
	printf("%c", arr[i]);
	
}
int len_arr = sizeof(arr) / sizeof(arr[0]);
printf("\n%d" , len_arr);
printf("\n%c" , arr[i+50]);

输出结果为:

也就是说,循环几次,就存入几个值,但是数组的长度在定义时就被确定了为100,至于数组剩余的地方都是随机值。笔者还用了strlen,但显示为133 ,有没有大佬可以帮我解释解释。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值