为什么图书信息输不出来了


#include "ds.h"//自定义的头文件
using namespace std;//c++中指定命名空间
#include;
 
struct Book    //定义一种单本图书结构体类型
{
    string ISBN;         //书号 
    string  name;        //书名
    char   author;       //作者
    char   publisher;   //出版单位
    float  price;//价格
    int  year;//图书的年【若为1988年出版  请输入1988】
    int month;//图书的月【输入方法同上】
    int day; //图书的日【输入方法同上】               //中间请用空格空开
};

Book book[MAXSIZE];//图书的结构体数组

 /*9787521334111 新未来大学英语综合教程 孙有中 外语教学与研究出版社 74.9 2022 7 1
9787516519516 军事理论 宋来新 航空工业出版社 35.00 2020 8 2
9787115576668 数据结构 严蔚敏 人民邮电出版社 49.80 2022 1 2
 9787521326963 视听说 孙有中 外语教学与研究出版社 62.9 2022 7 1*/

void menu() //菜单函数 更好的用户体验
{
    cout << "********************************" << endl;
    cout << "********1.图书信息输入********" << endl;
    cout <<"********2.图书信息浏览********" << endl;
    cout << "********3.图书信息添加********" << endl;
    cout << "********4.图书信息删除(书号删除、按书名删除)********" << endl;
    cout << "********5.图书信息修改(修改除书名号外的图书信息等)********" << endl;
    cout << "********6.图书信息查询(按书名查询、按书号查询)********" << endl;
    cout << "********7.统计图书的平均价格********" << endl;
    cout << "********8.图书排序(按价格排序、按出版日期排序)********" << endl;
    cout << "********9.图书信息保存到文件********" << endl;
    cout << "*********************************" << endl;
}

void input(int &num)  //输入图书基本信息
{
    int i;
    cout<<"输入图书的本数num=";
    cin>>num;
    cout<<"请输入"<"本图书的信息,空格分开\n";
    for(i=0; i> book[i].ISBN >> book[i].name >> book[i].author >> book[i].publisher >> book[i].price >> book[i].year >> book[i].month >> book[i].day;
    }
}
void output(int num) //输出图书基本信息
{
    int i;
    for (i=0; i"书名:"<" 作者;"<" 出版单位:"<" 价格:"<" 出版日期:"<< book[i].year << " " << book[i].month << " " << book[i].day << " "<< endl;
    }
    cout<<"\n";
}
 
void insertm(int& num)   //在最后面依次添加num本图书
{
    int i,m;
    cout << "需要添加图书信息的本数为:\n ";
    cin >> m;
    cout << "请输入其信息【依次为书号(ISBN) 书名 作者 出版单位 价格 出版日期(书号不重复,用空格空开】\n ";
    for (i=0; i> book[i].ISBN >> book[i].name >> book[i].author >> book[i].publisher >> book[i].price >> book[i].year >> book[i].month >> book[i].day;
    }
    num = num + m;
    cout << "图书信息添加后为:\n";
    output(num);
}
 
void delete_books(int num) //删除图书
{
    int i,choice,t=0;
    string ISBN1;
    string name1;
    cout<<"**************进入删除图书系统*****************\n";
    cout<<"**************按书号删除请按1******************\n";
    cout<<"**************按书名删除请按2******************\n";
    cin>>choice;
    switch(choice) //按书号删除和按书名删除
    {
    case 1:
        cout<<"请输入你想删除的图书的书号: ";
        cin>>ISBN1;
        for(i=0; iif(ISBN1 == book[i].ISBN)
            {
                t = i; //记住要删除图书的下标
                break;
            }
            else
                cout<<"删除失败,请确认书号是否正确!"<if(t != num - 1) //判断要删除图书是否为最后一本 即判断t是否为最后一个值
        {
            for(i=t; i1];
            }
        }
        num = num-1;
        output(num);
    case 2:
        cout<<"请输入你想删除的图书的书名: ";
        cin>>name1;
        for(i=0; iif(name1 == book[i].name)
            {
                t = i; //记住要删除图书的下标
                break;
            }
            else
                cout<<"删除失败,请确认书名是否正确!"<if(t != num-1) //判断要删除图书是否为最后一本 即判断t是否为最后一个值
        {
            for(i=t; i1];
            }
        }
        num = num-1;
        output(num);
    }
}
 
void change_books(int num)
{
    string ISBN2;
    int i,t=0,choice;
    cout<<"请输入要修改信息图书的书号:"<>ISBN2;
    for(i=0; iif(ISBN2 == book[i].ISBN)
        {
            t = i;
            break;
        }
        else
            cout<<"无图书信息,请确认书号是否正确!"<"请输入需要修改信息的序号:"<"1.书名"<"2.作者"<"3.出版单位"<"4.价格"<>choice;
    switch(choice)
    {
    case 1:
        cout<<"请输入:";
        cin>>book[t].name;
        break;
    case 2:
        cout<<"请输入:";
        cin>>book[t].author;
        break;
    case 3:
        cout<<"请输入:";
        cin>>book[t].publisher;
        break;
    case 4:
        cout<<"请输入:";
        cin>>book[t].price;
        break;
    default:
        cout<<"输入错误!请重新输入1-4"<void book_search(int num)
{
    int i,choice;
    string ISBN3;
    string name3;
    cout<<"进入查询图书系统\n";
    cout<<"按书号查询请按1\n";
    cout<<"按书名查询请按2\n";
    cin>>choice;
    switch(choice)
    {
    case 1:
        cout<<"请输入你想查询的图书的书号:";
        cin>>ISBN3;
        for(i=0; iif(ISBN3 == book[i].ISBN)
            {
                cout<<"查询成功\n";
                cout<<"该书基本信息为:\n";
                cout<<"书名:"<" 作者;"<" 出版单位:"<" 价格:"<" 出版日期:"<< book[i].year << " " << book[i].month << " " << book[i].day << " "<< endl;
                break;
            }
            else
                cout<<"查询失败,请核对书号是否正确\n";
        }
        output(num);
    case 2:
        cout<<"请输入你想查询的图书的书名:";
        cin>>name3;
        for(i=0; iif(name3 == book[i].name)
            {
                cout<<"查询成功\n";
                cout<<"该书基本信息为:\n";
                cout<<"书名:"<" 作者;"<" 出版单位:"<" 价格:"<" 出版日期:"<< book[i].year << " " << book[i].month << " " << book[i].day << " "<< endl;
                break;
            }
            else
                cout<<"查询失败,请核对书名是否正确\n";
        }
        output(num);
    }
}
 
int main()
{
    int num=0;
    int choice;
    menu();
    input(num);
    cout << "进行图书信息浏览:    " << endl;
    output(num);
    cout<<"请输入需要进入的系统3-9:";
    cin>>choice;
    switch(choice)
    {
    case 3:
        insertm(num);
        break;
    case 4:
        delete_books(num);
        break;
    case 5:
        change_books(num);
        break;
    case 6:
        book_search(num);
        break;
    }
    system("pause");
}
![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/489492460976111.png "#left")

你的问题是,我让你要么用string要么用char[],你用的是char

char author; //作者
char publisher; //出版单位
这两行换成 string

你可以学习下调试程序,很显然看出来author没有得到正确的值。

img

img

完整代码已经发你邮箱了。

参考GPT和自己的思路:

根据给出的代码,可能导致图书信息输不出来的原因是在结构体定义中,作者和出版单位应该使用string类型而不是char类型。需要修改为如下代码:

struct Book    //定义一种单本图书结构体类型
{
    string ISBN;         //书号 
    string name;        //书名
    string author;       //作者
    string publisher;   //出版单位
    float price;//价格
    int year;//图书的年【若为1988年出版 请输入1988】
    int month;//图书的月【输入方法同上】
    int day; //图书的日【输入方法同上】 //中间请用空格空开
};

此外,在函数中也需要注意,输出图书信息时应该使用book[i].author和book[i].publisher,而不是book[i].author和book[i].publisher,即应该使用string类型而不是char类型。

参考GPT和自己的思路:

根据代码中的定义,Book 结构体中的 author 和 publisher 应该是字符串(string)类型而不是字符(char)类型,因此需要将它们改为 string 类型:

struct Book    //定义一种单本图书结构体类型
{
    string ISBN;         //书号 
    string name;        //书名
    string author;       //作者
    string publisher;   //出版单位
    float  price;//价格
    int  year;//图书的年【若为1988年出版 请输入1988】
    int month;//图书的月【输入方法同上】
    int day; //图书的日【输入方法同上】 //中间请用空格空开
};

此外,在 switch 语句的每个 case 后一定要加上 break 语句,否则代码会在执行完一个 case 后继续执行下一个 case,导致错误。例如:

case 1:
    // some code here
    break;
case 2:
    // some code here
    break;
default:
    // some code here
    break;

希望对你有帮助!

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^