简单密码匹配程序的小问题
登录1.rar
(1.65 KB)
新手,写了个类似与登录密码匹配的小程序。现在有些小问题。
⒈密码的保存可不可以不要单独存放在文件中(容易被误删除)。
⒉代码最后修改密码的change()函数调用后,如果再继续执行loading()函数就会出错,这是怎么回事呢?
代码我copy在下面了,附件里面也上传了一份。
程序代码:
#include"stdio.h" #include"stdlib.h" #include"string.h" #include"conio.h" void loading(); void login(); void choice(); void change(); int main(void) { loading(); return 0; } void loading() { FILE*fp; int i,n; char Password[20],password_; char ch[20]; int len=0; if((fp=fopen("data.in","r"))==NULL) { printf("\n\n\n\t\t\t首次登录请设置密码\n\t\t\t"); change(); return; } while(ch[len]!='\0') fscanf(fp,"%s",&ch[len++]); fclose(fp); //******************************* char password[20]; if((fp=fopen("data.in","r"))==NULL) { printf("open file error!"); getch(); return ; } fgets(password,len+1,fp); fclose(fp); //我是华丽的分割线************************************* printf("\n\n\n"); for(n=1;n<=3;n++)//给密码三次输入机会 { printf(" 密码:"); for(i=0;i<len;)//密码要求为八位 { password_=getch(); if(password_>='0' && password_<='9'||password_>='a' && password_<='z'||password_>='A' && password_<='Z')//要求密码由1--9之间的数字组成 { Password[i++]=password_; printf("*"); } } Password[i]='\0'; printf("\n"); /****也是分割线*******************************************************************************/ if(strcmp(Password,password)==0)//***********判断密码是否正确 { system("cls"); printf("\n\n\n\n\n恭喜您,登录成功!\n"); system("pause"); choice(); exit(0); } else { if(n<3)//**************若密码错误,提示并警告 { printf(" 密码错误,请重新输入,您还有%d次机会!\n",3-n); system("pause");//屏幕停顿,按任意就按继续___这条命令等同于getch(); system("cls");//清屏 } else { printf(" 密码错误次数超过三次,退出!\n");break;//**********密码错误超限,退出 } } /************还是分割线************************************************************/ } } void choice() { char k; printf("\n\n\t\t\t键入1,启动程序!\n"); printf("\t\t\t键入2,返回登录界面!\n"); printf("\t\t\t键入3,修改密码!\n"); printf("\t\t\t键入4,直接退出程序!\n"); printf("\t\t\t"); k=getch(); switch(k) { case '1': login();break; case '2': loading();break; case '3': change();break; case '4': exit(0); default: printf("请重新键入!\n"); system("cls"); system("pause"); break; } } //大家好,我上一条分割线的弟弟,我仍然叫分割线*********************** void login() { printf("login函数成功执行!!\n\t\t\t"); getch(); return; } //我是最后的分割线************************************************** void change() { FILE *fp; char ch; if((fp=fopen("data.in","w"))==NULL) { printf("can't open file when change"); return ; } printf("请输入密码,并以'#'结束\n"); while((ch=getch())!='#') { fputc(ch,fp); printf("*"); } printf("\n"); fclose; printf("\t\t\t您已修改密码,请重新登录!\n\t\t\t"); system("pause"); system("cls"); // loading();//加入此行代码后选择修改密码时正常,但是重新登录时会出错,“data.in”文件为空! return; }请教一下解决的办法,谢谢!