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(); //主界面函数
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() {
//程序入口
menu();
return 0;
}
void color(short x){
//改变字体颜色
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), x);
}
void menu() {
//主界面
int l;
SqList 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();
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();
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;
return OK;
}
void inputBook(SqList L) {
//录入图书信息
int number;
char yn;
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);
printf("\n\n");
L.length++;
}
printf("是否录入完成(y or n)\n");
scanf("%s", &yn);
if (yn == 'y') {
system("cls");
menu();
} else {
system("cls");
inputBook(L);
}
}
void printfBook(SqList L) {
// 打印图书信息
for(int i=0;i<L.length;i++)
{
printf("图书编号:%-10s 图书名称:%-10s 价格:%.2f\\n\\n",L.elem[i].id,L.elem[i].name,L.elem[i].price);
}
}
//__attribute__((unused)) int storageBook(SqList L) {
// // 存储图书信息txt
// FILE *fp = fopen("C:\\Users\\ZHUANG\\CLionProjects\\untitled\\data.txt", "a+");
// if (fp == NULL) {
// printf("【错误】文件打开失败!\n");
// return 0;
// }
// for (int i = 0; i < L.length; i++) {
// fprintf(fp, "%-15s%-15s%.2lf\n", L.elem[i].id, L.elem[i].name, L.elem[i].price);
// }
// fclose(fp);
// color(2);
// printf("[成功]信息存储成功!\n");
// color(0xF);
//}
//void readBook(SqList L) {
// //从文件中读取信息
// FILE *fp;
// int i=0;
// fp = fopen("C:\\Users\\ZHUANG\\CLionProjects\\untitled\\data.txt", "r");
// if (fp == NULL) {
// color(0xc);
// printf("[警告]文件打开失败\n");
// color(0xF);
// } else {
// while (!feof(fp)){
// fscanf(fp,"%s%s%lf\n", L.elem[i].id, L.elem[i].name, &L.elem[i].price);
// L.length++;
// i++;
// printf("%s\t%s\t%lf\n", L.elem[i].id, L.elem[i].name, L.elem[i].price);
// }
// color(2);
// printf("[tip]文件读取成功\n");
// color(0xF);
// fclose(fp);
// }
//}