题目:编写代码模拟三次密码输入的场景。
最多能输入三次密码,密码正确,提示“登录成功”,密码错误,
可以重新输入,最多输入三次。三次均错,则提示退出程序。
分析:题目相对简单,看完后,你可能马上会写下如下代码-->
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char*password = "abcde";
char input[1024] = { 0 };
int i;
printf("请输入密码:");
for (i = 0; i < 3; i++)
{
scanf("%s", input);
if (strcmp(password, input) == 0)
{
printf("登录成功\n");
break;
}
else
{
printf("密码错误,请重新输入:");
}
}
if (i == 3)
{
printf("退出\n");
}
system("pause");
return 0;
}
但是这是错的,当第三次输入密码错误时,i等于2,程序会执行printf("密码错误,请重新输入:");随后i变为3,离开循环,来到条件判断语句,符合i==3,所以紧接着执行printf("退出\n");,最后结果如下
正确的方式是:在循环中进入else语句(即密码不正确时)就要判断i的范围。只有在范围内,才输出"密码错误,请重新输入:"语句,一旦第三次猜错,就要直接退出程序
正确代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char*password = "abcde";
char input[1024] = { 0 };
//int i;
int count = 0;
printf("请输入密码:");
while (count <= 3)
{
scanf("%s", input);
count++;
if (strcmp(password, input) == 0)
{
printf("登录成功\n");
break;
}
else
{
if (count < 3)//这里一定要判断是否<3,因为第三次输入错误时,就应该直接退出程序,不能再输出“密码错误,请重新输入:”
{
printf("密码错误,请重新输入:");
}
else
{
printf("退出\n");
break;
}
}
}
//for循环书写
/*for (i = 0; i < 3; i++)
{
scanf("%s", input);
if (strcmp(password, input)==0)
{
printf("登录成功\n");
break;
}
else
{
if (i < 2)
{
printf("密码错误,请重新输入:");
}
else
{
printf("退出\n");
break;
}
}
}*/
system("pause");
return 0;
}
运行结果: