问题分析:
模拟用户登录情景,实现简单密码功能;只允许输入三次密码,如果密码正确则提示登录成功,如果三次均输入错误,则退出程序;
解决过程:
1、定义两个数组 arr1、arr2,分别存放原始设定密码、用户输入密码;
2、密码比对阶段;
3、若比对成功;则打印“登录成功”,若比对失败,则打印比对失败;
4、判断是否三次输入失败,退出程序
运行环境:
Visual Studio 2022
运行代码:
代码一:
密码输入模式 -> 输入1个字符,1个空格,再输入一个字符,一个空格(循环6遍)
#include <stdio.h>
#include <string.h>
int main()
{
int arr1[6] = { 1,2,3,4,5,6 };
int arr2[6] = { 0 };
int i = 0;
int k = 0;
int t = 1; //记录登录失败次数
while (t <= 3)
{
for (i = 0; i < 6; i++)
{
scanf("%d", &arr2[i]);
}
getchar(); //处理'\n'
k = 0;
for (i = 0; i < 6; i++)
{
if (arr1[i] == arr2[i])
{
k++;
}
else
{
t++;
if (t <= 3)
printf("登录失败\n");
break;
}
}
if (k == 6 && t <= 3)
{
printf("登录成功\n");
break;
}
}
if (t > 3)
{
printf("已累计三次密码错误,实现报警\n");
}
return 0;
}
代码二:
密码输入模式 -> 直接输入6个字符,不用输入空格
#include <stdio.h>
#include <string.h>
int main()
{
char arr1[6] = "123456" ;
char arr2[6] = "000000" ;
int i = 0;
int k = 0;
int t = 1; //记录登录失败次数
while (t <= 3)
{
scanf("%s", arr2);
k = 0;
for (i = 0; i < 6; i++)
{
if (arr1[i] == arr2[i])
{
k++;
}
else
{
t++;
if (t <= 3)
printf("登录失败\n");
break;
}
}
if (k == 6 && t <= 3)
{
printf("登录成功\n");
break;
}
}
if (t > 3)
{
printf("已累计三次密码错误,实现报警\n");
}
return 0;
}
代码三:
密码输入模式 -> 直接输入6个字符,不用输入空格,并简化算法
#include <stdio.h>
#include <string.h>
int main()
{
int i = 0; //记录登录失败次数
char password[20] = { 0 };
for (i = 0; i < 3; i++)
{
printf("请输入密码:>");
scanf("%s", password); //此处的数组名 password 代表指针,存放地址,故不用加'&'
if (strcmp(password, "123456") == 0) //两个字符串比较,不能用==,应该使用strcmp()函数
{
printf("登录成功\n");
break;
}
else
{
printf("登录失败\n");
}
}
if (i == 3)
{
printf("三次密码均错误,退出程序\n");
}
return 0;
}