简单密码匹配程序的小问题
现在有些小问题。
⒈密码的保存可不可以不要单独存放在文件中(容易被误删除)。
⒉代码最后修改密码的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;
}
请教一下解决的办法,谢谢!



