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 的值。