我不爱罗145 2022-06-24 11:24 采纳率: 0%
浏览 29

c语言程序exe运行停止

c语言程序设计,选择序号2的时候程序停止运行
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
int main();
void luru();
void chakan();
void jieyue();
void guihuan();
void chazhao();
void shanchu();



void cun()//文件
{
    FILE *fp;
    fp=fopen("book1.txt","wt");
    if(fp==NULL)
    {
    printf("\n不能打开book.txt");
    getch();
    exit(1);
    }
}


struct date
{
    int year;
    int month;
    int day;
};
struct  book//结构体写书的信息
{
    char name[21];//书名
    char name2[21];//作者
    float money;//价格
    int num;//书的编号
    int many;//数量
    struct date Rdate;//书的录入日期
    
};
struct book b[20];//结构体变量


void menu()//菜单
{
    printf("=====================================\n");
    printf(" 【******欢迎使用图书管理系统******】\n");
    printf("‖系统菜单:                        ‖\n");
    printf("‖1.录入新书籍(首次使用)            ‖\n");
    printf("‖2.查看已录入书籍                  ‖\n");
    printf("‖3.借阅书籍                        ‖\n");
    printf("‖4.归还书籍                        ‖\n");
    printf("‖5.删除已录入书籍                  ‖\n");
    printf("‖6.查找书籍                        ‖\n");
    printf("‖0.退出系统                        ‖\n");
    printf("=====================================\n");
    printf("请输入序号:\n");
    int a;
    scanf("%d",&a);//输入序号
    switch (a)//选择序号
    {
    case 1:luru();break;
    case 2:chakan();break;
    case 3:jieyue();break;
    case 4:guihuan();break;
    case 6:chazhao();break;
    case 5:shanchu();break;
    case 0:printf("按任意键退出系统!");break;
    default: printf("未输入正确序号");break;
    }
}

void luru()//录入函数
{    int n1,i,j,k;
    int flag=0;

    FILE *fp1;//存书的信息指针
        fp1=fopen("book1.txt","wt");//只写
        if(fp1==NULL)
        {
            printf("\n不能打开book1.txt");
            getch();
            exit(1);
        }
        FILE *fpi;//存下标指针
        fpi=fopen("i.txt","wt");//只写
        if(fpi==NULL)
        {
            printf("\n不能打开i.txt");
            getch();
            exit(1);
        }
    FILE *fpf;//存标识符指针
        fpf=fopen("flag1.txt","wt");//只写
        if(fpf==NULL)
        {
            printf("\n不能打开flag1.txt");
            getch();
            exit(1);
        }

        if (fscanf(fpf,"%d",flag)==EOF)
        flag=0;
        else flag=fscanf(fpf,"%d",flag);

    if (flag==0)
{    printf("请输入录入书籍的个数(<=20):\n");
    scanf("%d",&n1);

for (i=0;i<n1;i++)
    {
    printf("当前正在录入第%d种书\n",i+1);
    printf("请输入书名:\n");
    scanf("%s",&b[i].name);
    printf("请输入作者:\n");
    scanf("%s",&b[i].name2);
    printf("请输入价格(可用小数):\n");
    scanf("%f",&b[i].money);
    printf("请输入编号:\n");
    scanf("%d",&b[i].num);
    printf("请输入入库数量:\n");
    scanf("%d",&b[i].many);
    printf("请输入录入日期(年(空格)月(空格)日):\n");
    scanf("%d %d %d",&b[i].Rdate.year,&b[i].Rdate.month,&b[i].Rdate.day);
    
    fprintf(fp1,"%s %s %f %d %d %d %d %d",b[i].name,b[i].name2,b[i].money,b[i].num,b[i].many,b[i].Rdate.year,b[i].Rdate.month,b[i].Rdate.day);//存书籍信息
    
    flag=flag+1;
    
    }
fprintf(fpi,"%d",i);
fprintf(fpf,"%d",flag);//存标识符
    fclose(fp1);
    fclose(fpi);
    fclose(fpf);
}
    //未使用//
    else if (flag>0&&flag<=20-flag)    
    {    

        printf("请输入新录入书籍的个数:\n");
        scanf("%d",&k);
        for (flag;flag<=k+flag;flag++)
        {
            printf("请输入书名:\n");
            scanf("%s",&b[flag].name);
            printf("请输入作者:\n");
            scanf("%s",&b[flag].name2);
            printf("请输入价格:\n");
            scanf("%f",&b[flag].money);
            printf("请输入编号:\n");
            scanf("%d",&b[flag].num);
            printf("请输入入库数量:\n");
            scanf("%d",&b[flag].many);
            printf("请输入录入日期:\n");
            scanf("%d %d %d",&b[flag].Rdate.year,&b[flag].Rdate.month,&b[flag].Rdate.day);
            
        }
    }
    else if (flag>20)
        printf("空间不足");
    //未使用//
 
printf("输入-1返回主菜单\n");
scanf("%d",&j);
if (j==-1)
menu();
}


void chakan()//查看已录入书籍
{    
    int i,j=0;
        FILE *fp1;//存书的信息指针
        fp1=fopen("book1.txt","rt");//只读
        if(fp1==NULL)
        {
            printf("\n不能打开book1.txt");
            getch();
            exit(1);
        }
        
i=0;
    
do{            fscanf(fp1,"%s %s %f %d %d %d %d %d",b[i].name,b[i].name2,b[i].money,b[i].num,b[i].many,b[i].Rdate.year,b[i].Rdate.month,b[i].Rdate.day);    
            printf("书名:%s\n",b[i].name);
            printf("作者:%s\n",b[i].name2);
            printf("价格:%f\n",b[i].money);
            printf("编号:%d\n",b[i].num);
            printf("数量:%d\n",b[i].many);
            printf("录入日期:%d年%d月%d日\n",b[i].Rdate.year,b[i].Rdate.month,b[i].Rdate.day);    
            i++;
    
            }while(fscanf(fp1,"%s %s %f %d %d %d %d %d",b[i].name,b[i].name2,b[i].money,b[i].num,b[i].many,b[i].Rdate.year,b[i].Rdate.month,b[i].Rdate.day)!=EOF);
    
                fclose(fp1);


    printf("输入-1返回主菜单\n");
    scanf("%d",&j);
    if (j==-1)
        menu();
}



void jieyue()
{
printf("");
}



void guihuan()
{
printf("");
}



void shanchu()
{
printf("");
}


void chazhao()//查找书籍
{    int i,j,a;
    printf("请输入书籍编号:");
    scanf("%d",&a);
    for (i=1;i<=20;i++)
    {
        if (a==b[i].num)
            printf("已查询到书籍信息\n");
            printf("所查书籍信息为:\n");
            printf("书名:%s\n",b[i].name);
            printf("作者:%s\n",b[i].name2);
            printf("价格:%f\n",b[i].money);
            printf("编号:%d\n",b[i].num);
            printf("数量:%d\n",b[i].many);
            printf("录入日期:%s\n",b[i].Rdate);

    }
    printf("输入-1返回主菜单\n");
    scanf("%d",&j);
    if (j==-1)
        menu();
}


 int main()//主程序
{    
     menu();    
     return 0;
}



运行结果及报错内容 :exe已停止运行
我的解答思路和尝试过的方法 :都试了没用
我想要达到的结果:能不能帮我改进一下代码
  • 写回答

3条回答 默认 最新

  • 快乐鹦鹉 2022-06-24 11:30
    关注

    fscanf读取整型、浮点型数据时,要对变量名加&,进行取地址

    评论

报告相同问题?

问题事件

  • 创建了问题 6月24日

悬赏问题

  • ¥15 鼠标右键,撤销删除 复制 移动,要怎样删除
  • ¥15 使用MATLAB进行余弦相似度计算加速
  • ¥15 服务器安装php5.6版本
  • ¥15 我想用51单片机和数码管做一个从0开始的计数表 我写了一串代码 但是放到单片机里面数码管只闪烁一下然后熄灭
  • ¥20 系统工程中,状态空间模型中状态方程的应用。请猛男来完整讲一下下面所有问题
  • ¥15 我想在WPF的Model Code中获取ViewModel Code中的一个参数
  • ¥15 arcgis处理土地利用道路 建筑 林地分类
  • ¥20 使用visual studio 工具用C++语音,调用openslsx库读取excel文件的sheet问题
  • ¥100 寻会做云闪付tn转h5支付链接的技术
  • ¥15 DockerSwarm跨节点无法访问问题