一.问题要求
模拟用户登录情况,用户输入密码,如果密码正确就提示登陆成功,错误就显示登录失败,且只能有三次机会,输入错误三次就退出程序
二.解决思路
我们可以先确定一个密码,然后用户输入后,将其与正确密码进行对比,如果相同就执行一种情况;如果不同就执行另一种情况;错误三次就执行另一种情况。很明显,我们用if语句就可以实现这种要求
我们试着写一下代码:
#include<stdio.h>
int main()
{
int password[20]={0};
int i=0;
for (i=0;i<3;i++)
{
printf("请输入密码:");
scanf("%s",&password);
if(password=="123456")
{
printf("登陆成功\n");
break;
}
else
{
printf("登录失败\n");
}
}
if(i==3)
printf("三次密码都错误,退出程序\n");
return 0;
}
运行结果是:
明明密码是正确的但是仍然输出“登录失败”,这是因为:==不能用来比较两个字符串是否相同,如
果要比较需要用到一个库函数strcmp,同时需要头文件#include<string.h>。我们再试试:
#include<stdio.h>
#include<string.h>
int main()
{
int password[20]={0};
int i=0;
for (i=0;i<3;i++)
{
printf("请输入密码:");
scanf("%s",&password);
if(strcmp(password,"123456")==0)
{
printf("登陆成功\n");
break;
}
else
{
printf("登录失败\n");
}
}
if(i==3)
printf("三次密码都错误,退出程序\n");
return 0;
}
我们再来看看结果:
这样就实现的我们想要的结果
三.库函数strcmp()
用法:
strcmp(str1,str2),str1——要比较的第一个字符串;str2——要比较的第二个字符串。将str1和str2对比:
如果返回值<0,就代表str1<str2;
如果返回值>0,就代表str1>str2;
如果返回值=0,就代表str1=str2;
例子:
输出1,说明“abc”小于“ABC”,在ASCII码表中的确大写字母在小写字母前面,所以输出正确
输出0,则str1和str2相同,正确。
标签:登录,str2,str1,C语言,密码,printf,password,模拟 From: https://blog.51cto.com/u_15832450/5784623