C语言实现密码的设置及验证

#include <stdio.h>




/*定义密码输入函数*/
void password_set(unsigned int *passwordArrary)
{
 int enter_counter; /*定义密码输入计数器*/




 /*for循环实现密码的输入*/
 printf("请输入6位数字密码\n");
 for (enter_counter = 0; enter_counter < 6; enter_counter++)
 {
  scanf_s("%d", &passwordArrary[enter_counter]);
 }
}




/*定义check_rule函数检查输入密码是否符合密码设置规则*/
int check_rule(unsigned int *passwordArrary)
{
 int checkRule_flag;
 int checkRule_counter;




 checkRule_flag = 0;




 for (checkRule_counter = 1; checkRule_counter <= 6; checkRule_counter++)
 {
  if ((*passwordArrary) > 0 && (*passwordArrary) < 10)
  {
   checkRule_flag++;
   passwordArrary++;
  }
  else
  {
   passwordArrary++;
  }
 }




 if (checkRule_flag == 6)
 {
  return 1;
 }
 else
 {
  return 0;
 }
}




/*定义一个密码校验函数*/
int password_value_check(unsigned int *passwordArrary)
{
 unsigned int password_check[6]; /*存放再次输入的密码值*/
 int passwordCheckEnter_counter; /*循环输入密码*/
 int passwordCheck_counter; /*校验次数计数器*/
 int passwordCheck_flag; /*校验标志位*/




 passwordCheck_counter = 0;
 passwordCheck_flag = 0;




 /*再次输入密码并存如校对数组*/
 printf("请再次输入刚才设置的密码以便进行校验!\n");
 for (passwordCheckEnter_counter = 0; passwordCheckEnter_counter < 6; passwordCheckEnter_counter++)
 {
  scanf_s("%d", &password_check[passwordCheckEnter_counter]);
 }




 while (passwordCheck_counter < 6)
 {
  if ((*passwordArrary) == password_check[passwordCheck_counter]) /*判断两次密码是否相同*/
  {
   passwordCheck_flag++;
   passwordArrary++;
   passwordCheck_counter++;
  }
  else
  {
   passwordArrary++;
   passwordCheck_counter++;
  }
 }




 if (passwordCheck_flag == 6) /*判断标志位返回相应值*/
 {
  return 1;
 }
 else
 {
  return 0;
 }
}




int main()
{
 unsigned int passwordArrary[6]; /*定义一个存放密码的数组*/
 unsigned int *password_set_return;
 int check_rule_flag; /*定义密码规则检查返回标识位*/
 int check_value_flag; /*设定密码校验标志位*/
 int set_counter; /*定义密码设置计数器*/
 int check_counter; /*定义密码校验计数器*/




 set_counter = 1;
 check_counter = 1;




 password_set(passwordArrary);




 /*利用check_rule函数检查输入的函数是否符合密码设置规则*/
 check_rule_flag = check_rule(passwordArrary);
 while (check_rule_flag == 0 && set_counter <= 5)
 {
  set_counter++;
  printf("您输入的密码不符合规格,请重新输入6位0~9之间的密码\n");
  password_set(passwordArrary);
  check_rule_flag = check_rule(passwordArrary);
 }
 if (set_counter > 5)
 {
  printf("密码设置已经超过规定次数!\n");
 }
 else
 {
  check_value_flag = password_value_check(passwordArrary);
  while (check_value_flag == 0 && check_counter <= 5)
  {
   check_counter++;
   check_value_flag = password_value_check(passwordArrary);
  }
  if (check_counter > 5)
  {
   printf("输入错误次数超过5次,登陆失败!\n");
  }
  else
  {
   printf("密码校验成功!\n");
  }
 }




 return 0;
}

纯属练习 可以用来当做众多小程序(例如你的练习程序)的总控制程序,第一次进入提示创建密码,以后就要输入密码,用文件保存密码,按程序代号进入相应的程序。 不足:忘了隐藏密码字符。 即,密码用 **** 表示,这个已经修正了,代码如下: #include #include #include int string_same(char *string_1,char *string_2);/*判断两个字符串是否一致的子函数原型*/ void enter_mima(char *enter_1); //输入密码时,用“*”代替密码 int main(void) { FILE *mimawenjian; /*密码文件变量*/ char mima_1[30],mima_2[30];//用来储存密码的数组 int loop_1; char dh_1[6];//用于记录输入的程序代号 printf(" 欢迎进入程序控制台\n"); printf("--------------------------------------------------------------------------------"); /****************************************************************************************************************************/ if ((mimawenjian/*密码文件变量*/=fopen("password","r"))==NULL) /*判断密码文件是否存在,以下的程序代码是假设的密码文件不存在*/ { mimawenjian/*密码文件变量*/=fopen("password","w"); //这里表示,既然没密码文件那就新建一个可以写入文件的密码文件 printf("这是你第一次使用本程序,请设置登录密码!\n"); for(;;) /*循环输入密码,直到两次输入密码一致*/ { printf("请输入你要设置密码:"); //scanf("%s",mima_1);fflush(stdin); enter_mima(mima_1);fflush(stdin); printf("请再次输入设置密码:"); //scanf("%s",mima_2);fflush(stdin); enter_mima(mima_2);fflush(stdin); if(string_same(mima_1,mima_2)==1) break; /*这里的意思是,如果两次输入密码一致时,就跳出循环,准备写入密码*/ else printf("提示:密码输入错误,请重新设置!\n"); /*这里的意思是,如果两次输入密码不一致时,就提示密码输入错误*/ } printf("你的密码是:%s,请妥善保管!\n",mima_1); fputs(mima_1,mimawenjian); /*将密码写入密码文件*/ fclose(mimawenjian);//关闭密码文件 } /*********************************************************************************************************************************/ //********************************************************************************************************************************* else /*判断密码文件是否存在,以下的程序代码是假设的密码文件存在*/ { //------------------------------------------------ char *n=mima_1,i; // while (( i=fgetc(m
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值