一、要求
用户输入密码,要求:
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 ,有没有大佬可以帮我解释解释。