程序员张雷 2022-03-07 00:39 采纳率: 50%
浏览 32
已结题

c语言控制台程序编译通过执行不行

问题遇到的现象和发生背景
//问题可能出在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);
    }

运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果
  • 写回答

2条回答 默认 最新

  • CSDN专家-link 2022-03-07 04:53
    关注

    if(fgets(password,9,add_password))
    执行到这行时,password指针还没有分配空间啊,当然不行了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月9日
  • 已采纳回答 3月7日
  • 创建了问题 3月7日

悬赏问题

  • ¥15 echarts动画效果失效的问题。官网下载的例子。
  • ¥60 许可证msc licensing软件报错显示已有相同版本软件,但是下一步显示无法读取日志目录。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加