如图,不管是先使用show打印列表,然后进行查找打印
还是先查找再用show打印,都是会突然宽很多
不太明白,这里的格式控制符不是完全一样的吗?
//定义一个结构体数据类型,用来描述我校图书馆中图书的基本信息,信息包含 :
//统一 - 书号(不超过13字符)
//书名(不超过30字符)
//作者(不超过20字符)
//出版社(不超过30字符)
//出版日期(包括 : 年、月、日)
//价格(精确到分)
//假设10本图书的基本信息已经存放到一一个数组中,要求:根
//据输入的书号查询该书,若查找到,输出该书的所有基本信
//息,若未查到,给出提示信息。
#include <stdio.h>
#include <assert.h>
#include <string.h>
#define MAX 10
typedef struct book
{
char ID[15];
char BookName[30];
char Writer[20];
char Publish[30];
char date[12];
float price;
}BOOK;
typedef struct Contact
{
BOOK data[MAX];//存放数据
int sz;//有效数据个数
}Contact;
void menu()
{
printf("*********************************\n");
printf("****** 1.add 2.show ******\n");
printf("****** 3.search 0.exit ******\n");
printf("*********************************\n");
}
//增加书籍
void AddBook(Contact* pc)
{
if (pc->sz == MAX)
{
printf("书籍已满\n");
return;
}
printf("输入书号>");
scanf("%s", pc->data[pc->sz].ID);
printf("输入书名>");
scanf("%s", pc->data[pc->sz].BookName);
printf("输入作者>");
scanf("%s", pc->data[pc->sz].Writer);
printf("输入出版社>");
scanf("%s", pc->data[pc->sz].Publish);
printf("输入出版日期>");
scanf("%s", pc->data[pc->sz].date);
printf("输入价格>");
scanf("%f", &pc->data[pc->sz].price);
pc->sz++;
printf("增加书籍成功\n");
}
int FindBook(Contact* pc)
{
assert(pc);
char ID[15] = { 0 };
scanf("%s", ID);
int i = 0;
for (i = 0; i < pc->sz; i++)
{
if (strcmp(ID, pc->data[i].ID) == 0)
{
return i;
}
}
return -1;
}
//查找到后需要打印
void SearchBook(Contact* pc)
{
assert(pc);
printf("输入需要查找的书号>");
int i = FindBook(pc);
if (i != -1)
{
printf("找到书籍如下:\n");
printf("%-15s\t%-20s\t%-10s\t%-10s\t%-10s\t%-5s\t\n", "书号", "书名", "作者", "出版社", "出版日期","价格");
printf("%-15s\t%-20s\t%-10s\t%-10s\t%-10s\t%-5.2f\t\n",
pc->data[i].ID, pc->data[i].BookName, pc->data[i].Writer, pc->data[i].Publish, pc->data[i].date,pc->data[i].price);
}
else
{
printf("该书籍不存在\n");
}
}
void ShowBook(Contact* pc)
{
assert(pc);
if (pc->sz == 0)
{
printf("书架为空\n");
return;
}
printf("%-15s\t%-20s\t%-10s\t%-10s\t%-10s\t%-5s\t\n", "书号", "书名", "作者", "出版社", "出版日期", "价格");
int i = 0;
for (i = 0; i < pc->sz; i++)
{
printf("%-15s\t%-20s\t%-10s\t%-10s\t%-10s\t%-5.2f\t\n",
pc->data[i].ID, pc->data[i].BookName, pc->data[i].Writer, pc->data[i].Publish, pc->data[i].date, pc->data[i].price);
}
}
int main()
{
int input;
Contact con = { 0 };
do
{
menu();
scanf("%d", &input);
switch (input)
{
case 1:
AddBook(&con);
break;
case 2:
ShowBook(&con);
break;
case 3:
SearchBook(&con);
break;
case 0:
printf("退出系统\n");
break;
default:
printf("输入错误\n");
break;
}
} while (input);
return 0;
}
提问完就好了是什么鬼?