You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++图书馆管理系统按索引访问数据出现随机值和空内容如何解决

问题原因

核心问题出在变量作用域和输入处理逻辑上:

  • 你在addBook()和showBooks()函数内部都单独定义了Library lib对象,这两个是存储在栈区的独立临时变量,addBook()执行结束后该函数内的lib对象就会被销毁,写入的数据不会留存。showBooks()里新创建的lib对象没有被赋值过,成员都是未初始化状态,所以输出随机数字和空字段。
  • 选择菜单时执行的cin >> x会在输入缓冲区留下换行符,后续第一个getline会直接读取这个换行符得到空字符串,你当前把cin.ignore放在getline之后,位置错误。
修复方案
  1. 将Library存储实例调整为全局变量,保证两个函数操作的是同一个存储对象,数据可以跨函数留存
  2. 调整cin.ignore的位置到菜单输入之后,清空缓冲区残留的换行符
  3. 可选优化:将结构体调整为单本书的结构,再用数组存储多本图书,逻辑更清晰,同时增加边界校验避免数组越界

修复后完整代码如下:

#include <iostream>
using namespace std;
int p = 0;

struct Book{
    string title;
    string author;
    int isbn;
    int price;
};
Book lib[5]; // 全局图书数组,最多存储5本图书

void addBook();
void showBooks();

int main()
{
    while (true){
        cout << "\t\tLibrary Management Sytem\n";
        cout << "1. ADD BOOK.\n";
        cout << "2. SHOW BOOKS\n";
        cout << "Number: ";
        int x;
        cin >> x;
        cin.ignore(232, '\n'); // 清空输入缓冲区残留的换行符
        
        switch(x){
            case 1:
                addBook();
                break;
            case 2:
                showBooks();
                break;
            default:
                cout << "Invalid input.\n";
        }
    }
    return 0;
}

void addBook(){
    if(p >= 5){
        cout << "图书库容量已满,无法新增\n";
        return;
    }
    cout << "Enter Book title: ";
    getline(cin, lib[p].title);
    cout << "Enter The Author: ";
    getline(cin, lib[p].author);
    cout << "Enter ISBN: ";
    cin >> lib[p].isbn;
    cout << "Enter price: ";
    cin >> lib[p].price;
    p++;
    cout << "图书添加成功\n";
}

void showBooks(){
    if(p == 0){
        cout << "暂无录入的图书数据\n";
        return;
    }
    for (int i = 0; i < p; i++){
        cout << "===== 第" << i+1 << "本图书信息 =====\n";
        cout << "Book: " << lib[i].title << endl;
        cout << "Author: " << lib[i].author << endl;
        cout << "ISBN: " << lib[i].isbn << endl;
        cout << "Price: " << lib[i].price << endl;
    }
}

内容的提问来源于stack exchange,提问作者equinox_xy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 12:15:07