慕雪华年 2022-01-29 18:46 采纳率: 66.7%
浏览 31
已结题

为什么在第一次打印后,第二次打印的出版日期会宽那么多?

如图,不管是先使用show打印列表,然后进行查找打印
还是先查找再用show打印,都是会突然宽很多
不太明白,这里的格式控制符不是完全一样的吗?

img

img

//定义一个结构体数据类型,用来描述我校图书馆中图书的基本信息,信息包含 :
//统一 - 书号(不超过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;
}

提问完就好了是什么鬼?

img

  • 写回答

2条回答 默认 最新

  • 关注

    看代码没什么问题,是不是没有保存代码。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月6日
  • 已采纳回答 1月29日
  • 修改了问题 1月29日
  • 创建了问题 1月29日

悬赏问题

  • ¥15 想问一下树莓派接上显示屏后出现如图所示画面,是什么问题导致的
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号