c语言顺序表打印异常,先初始化顺序表,然后录入信息,结果打印不出内容程序直接退出,打印表长是正常的,是哪里出错了呀
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include <windows.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MAXSIZE 100 //顺序表可能达到的最大长度
typedef struct {
char id[8];
char name[20];
double price;
} BOOK;
typedef struct {
BOOK *elem; //存储空间的基地址
int length; //图书表中当前图书个数
} SqList; //图书表的顺序存储结构 SqList
void menu(SqList L); //主界面函数
int InitList(SqList *L);//初始化空表;
void inputBook(SqList *L); //录入图书信息
void printfBook(SqList *L); // 打印图书信息
int storageBook(SqList *L); //存储图书信息txt
void readBook(SqList *L); //从文件中读取信息
void color(short x); //改变字体颜色
int main() {
//程序入口
SqList L;
menu(L);
return 0;
}
void color(short x) {
//改变字体颜色
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), x);
}
void menu(SqList L) {
//主界面
int l;
printf("\t欢迎使用图书管理系统\t\n");
printf("\t 0.初始化图书表 \t\n");
printf("\t 1.录入图书信息 \t\n");
printf("\t 2.打印图书信息 \t\n");
printf("\t 3.查找图书信息 \t\n");
printf("\t 4.插入图书信息 \t\n");
printf("\t 5.删除图书信息\t\n");
printf("\t 6.修改图书信息\t\n");
printf("\t 7.排序图书价格 \n");
printf("\t 8.统计图书数量 \n");
printf("=================================\n");
printf("请输入要执行的操作: ");
scanf("%d", &l);
switch (l) {
case 0:
system("cls");
InitList(&L);
if (L.elem) {
color(2);//绿色字体
printf("图书表初始化成功!\n");
color(0xF);//白色字体
}
menu(L);
break;
case 1:
system("cls");
inputBook(&L);
break;
case 2:
system("cls");
printfBook(&L);
break;
case 3:
system("cls");
break;
case 8:
printf("表长为:%d\n", L.length);
Sleep(5000);
menu(L);
break;
default:
color(0xc); //红色字体
printf("[输入错误]请重新输入有效数字!\n");
Sleep(1000);
color(0xF);//白色字体
system("cls");
//menu();
break;
}
}
int InitList(SqList *L) {
//初始化空表
(L)->elem = (BOOK *) malloc(sizeof(BOOK) * MAXSIZE); //申请内存空间
if (!(L)->elem)
exit(OVERFLOW);
(L)->length = 0;
//printf("sizeof(*L)=%d\n",sizeof(*L));
return OK;
}
void inputBook(SqList *L) {
//录入图书信息
int number;
char yn;
//printf("L==NULL:%d",L==NULL);
printf("请输入存储的数量:");
scanf("%d", &number);
getchar();
for (int i = 0; i < number; i++) {
printf("请输入第%d本图书信息!\n", i + 1);
printf("图书ISBN:");
scanf("%s", (L)->elem[i].id);
getchar();
printf("图书名字:");
scanf("%s", (L)->elem[i].name);
getchar();
printf("图书价格:");
scanf("%lf", &(L)->elem[i].price);
getchar();
(L)->length++;
}
printf("是否录入完成(y or n)\n");
scanf("%c", &yn);
printf("yn=%c\n", yn);
if (yn == 'y') {
system("cls");
menu(*L);
} else {
system("cls");
inputBook(L);
}
}
void printfBook(SqList *L) {
// 打印图书信息
if ((L)->length == 0) {
return;
}
for (int i = 0; i < (L)->length; i++) {
printf("%s\t%s\t%.2f\n", (L)->elem[i].id, (L)->elem[i].name, (L)->elem[i].price);
}
}