模拟三次密码输入的场景。(C语言)

/*编写代码模拟三次密码输入的场景.
密码正确,提示"登录成功",密码错误,可以重新输入,
最多能输入三次密码,三次均错,则提示退出程序
/
/

思路:
1.设置密码;
2.用户输入密码;
3.判断用户输入密码是否正确:
a)若正确,输出相应提示;
b)若不正确,输入相应提示,并让用户重新输入,三次错误后,退出程序;
(用strcmp()函数可以方便快捷实现三次密码的比较)
*/

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 8  //定义存储密码的字符串长度(实际密码长度为N-1)

//设置密码函数
int set_password(char str[]){
	int i;  
	char ch = '\0';  //变量串用以吸收多余字符,初始化为 \0'
	printf("请设置%d位密码(多余位数无效!):\n", N - 1);  //提示用户输入信息
	for (i = 0; i < N - 1; ++i){  //循环遍历数组str[];
		str[i] = getchar();  //逐个保存数据
	}
	str[i] = '\0';  //将数组最后一个元素赋值为'\0'(即将数组变为字符串)
	while (ch = getchar() != '\n' && ch != EOF){  //清除缓冲区数据
		;
	}
}

//登录函数
int log_on(char str[]){
	int count = 3;  //变量count为输入密码次数
	int ret;  //变量ret用以接收strcmp()函数的返回值
	char ch;  //变量ch用以吸收用户输入的多余字符
	char str1[N];  //数组str1保存用户输入的密码
	while (count > 0){  //若还有输入密码机会
		printf("请输入%d密码(多余位数无效!):\n",N - 1);  //提示用输入信息
		memset(str1, 0, N);  //将数组str1初始化为0
for (int i = 0; i < N - 1; ++i) {//保存用户输入的7个字符作为密码
			str1[i] = getchar();  //每次保存一个字符到指定位置
		}
		while (ch = getchar() != '\n' && ch != EOF){  //清空输入缓冲区
			;
		}
		ret = strcmp(str1, str);  //比较两字符串,将返回值赋给ret
		if (ret == 0){  //若密码正确
			printf("登录成功.\n");  //打印输出提示信息
			return 1;  //返回值为1
		}
		else { 
			--count;  //尝试密码机会减1
			if (count == 0){   //若没有尝试密码机会
				printf("三次机会已用完,程序即将退出!\n");  //打印输出提示信息
				continue;  //跳过剩下语句
			} 
			printf("密码错误,您还有%d次机会:\n",count);  //打印输出提示信息
		}
		
	}
	return 0;  //返回值为0
}
           
//主函数
int main(){
	char str[N];  //数组str[]用以保存设置的数据
	set_password(str);  //调用设置密码函数
	log_on(str);  //调用登录函数
	system("pause");  
	return 0;
}		

输入数据时未及时取走的数据会留在缓冲区,从而影响下一次的数据输入,
所以在输入一次数据后,最好对缓冲区进行清理.可以用fflush(stdin);代替上
述清除缓冲区数据部分,但不推荐使用,因为fflush(stdin)兼容性并不强!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值