问题遇到的现象和发生背景
//问题可能出在fgets()函数上了,解决方案是尽可能把程序简单化
#include<stdio.h>
#include<stdbool.h>
#include<string.h>
#include<stdlib.h>
#include<setjmp.h>
jmp_buf menu_main;//顶一个到达主界面的jump文件
int password_right=0;//定义一个全局变量,核实密码输入正确与否
int password_r(void);//声明验证密码正确与否的函数
int password_enter(void);//声明一个输入数据功能模块的函数
int password_change(void);//声明一个更改密码功能模块的函数
int agree_(void);//声明一个同意报销的功能模块的函数
FILE *add_password=NULL;//定义硬盘存储密码文件句柄
const char *password_file="F:\\password_file.txt";//明确密码存储文件名称
char *password=NULL;
//开始定义全局数组
int main(void)
{
int choose_modular=0;//定义模块选择的变量
if(fopen_s(&add_password, password_file, "r+"))
{
printf("系统密码文件错误,现在退出系统!");
return 0;
}
{
if(fgets(password,9,add_password))
puts(password);
if(password=="\0")
{
printf("欢迎您第一次使用本系统,离休干部医药费报销工作负责人。");
printf("\n请您设置密码,今后该密码作为您的身份识别码。您也可以随时更改改密码!");
printf("\n请您输入8位密码:");
scanf("%s",password);//40行
fputs(password,add_password);
fclose(add_password);
add_password=NULL;
strcpy(password,"\0");
}
password_r();
if (password_right!=1)
{
printf("\n您输入的密码不正确,退出系统!");
return 0;
}
setjmp(menu_main);//明确主界面位置
printf("\n您好,离休干部医药费报销工作负责人,欢迎您!\n您已进入离休干部医药费报销系统。");
printf("\n本系统具备导入数据、查询数据、修改数据、查看并数据分析、修改密码5个功能模块");
printf("\n请输入相应符号以向本系统说明您要进行的操作。\n导入数据请输入'1'\n查看分析书记并审批请输入'2'\n修改密码请输入'3'\n退出系统请输入‘4’");
printf("\n请在此输入相应符号:");
scanf("%d",&choose_modular);
switch(choose_modular)
{
case 1:
break;
case 2:
break;
case 3:
password_change();
default:
return 0;
}
return 0;
}
}
//-----------------------------------
//分隔符___---___---___---下边是门禁模块
int password_r(void)//定义验证密码正确与否的函数
{
char *password_enter=NULL;
printf("\n欢迎您使用离休干部医药费报销系统\n为核实身份,请输入密码:");
scanf("%s",password_enter);//86行
char *pass_word=NULL;//设置读取存储磁盘存储密码文件数据的中间变量
if(fopen_s(&add_password,password_file,"r"))
{
printf("系统密码文件错误,现在退出系统!");
return 0;
}
if(fgets(pass_word,9,add_password))
puts(pass_word);
fclose(add_password);
add_password=NULL;
if(strcmp(pass_word,password_enter)==0)
password_right=1;
else
password_right=0;
return 0;
}
//门禁程序段编辑完毕
//------开始编辑更改密码模块程序段
int password_change(void)
{
char password_change_1;//定义一个给密码文件赋值用的中间变量
if(fopen_s(&add_password,password_file,"w"))
{
printf("系统密码文件错误,现在退出系统!");
exit(1);
}
printf("\n请您设置信密码,今后该密码作为您的身份识别码。您也可以随时更改改密码!");
printf("\n请您输入新的8位密码");
for(int i=1;i<=8;++i)
{
printf("\n请您输入新的%d位密码",i);
scanf("%c",&password_change_1);
fputc(password_change_1,add_password);
}
fclose(add_password);
longjmp(menu_main,1);
}
运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果