为什么会直接退出啊,文件是可以新建,但是无法写入?

img


void sd(struct library lib[])
{
     char wj;
     int i;
     wj=fopen("C:\\Users\\Public\\Documents\\shudan.txt","w");//打开文件
     if (wj==NULL)
     {
         printf("不能打开文件shudan.txt\n");
         return -1;
     } 
     for(i=0;i<n;i++)
     {
     scanf("%d",&i);
    fprintf(wj,"%d %s %s %s %f\n",lib[i].bh,lib[i].sm,lib[i].zz,lib[i].lx,lib[i].jg);
    }     
     fclose(wj);
}
#ifndef LIBRARY  //测试LIBRARY
#define LIBRARY  //定义LIBRARY 
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define HH printf("%-10s%-10s%-10s%-10s%-10s\n","编号","书名","作者","类型编号","价格")
 struct library
 {
     int bh;//编号 %d
     char sm[10];//书名 %s
     char zz;//作者 %s
     char lx;//类型编号 %s
     float jg;//价格 %f
 };
 static int n;//记录书本数量 
 void menu();
 void lr(struct library lib[]);
 void cx(struct library lib[]);
 void ll(struct library lib[],int i);
 void llde(struct library lib[]);
 void xg(struct library lib[]);
 void sc(struct library lib[]);
 void bc(struct library lib[]);
 void px(struct library lib[]);
 void pjz(struct library lib[]);
 void sd(struct library lid[]);
#endif//结束编译
 
```c
#include<stdio.h>
#include "library.h"
int main()
{
    struct library lib[100];
    int select, quit=0;
    while(1)
    {
        menu();
        scanf("%d",&select);
        switch (select)
        {
        case 1:
            lr(lib);//信息录入 
            break;
        case 2:
            llde(lib);//信息浏览 
            break;
        /*
case 3:
            cx(lib);//信息查询 
            break;*/
        case 4:
            xg(lib);//信息修改 
            break;
        /*
case 5:
            sc(lib);//信息删除 
            break;
        case 6:
            bc(lib);//信息保存 
            break;
        case 7:
            px(lib);//图书排序 
            break;
        case 8:
            pjz(lib);//价格平均值 
            break;*/
        case 9:
            sd(lib);//书单 
            break; 
        case 0:
            quit = 1;//退出系统 
            break;
        default:
            printf("请输入0~9之间的数字!\n");
            break;
        }
        if (quit == 1 )
        break;
        printf("按任意键返回主菜单!\n");
        getchar();
        getchar();
    }
    printf("程序结束!\n");
    return 0;    
} 

```

目测你的sd函数根本没有调用
而且 scanf("%d",&i);是要干什么,i不是循环变量吗,怎么还能随便改它的值,你是想让数组爆炸吗

有确认过fprintf的格式是否正确吗?

for(i=0;i<n;i++)
{
scanf("%d",&i);
fprintf(wj,"%d %s %s %s %f\n",lib[i].bh,lib[i].sm,lib[i].zz,lib[i].lx,lib[i].jg);
} 这里 scanf("%d",&i); 是干啥的,不需要输入 i 的值。