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

如何在C++中存储多个用户输入并全部展示?代码问题求助

解决方法:用结构体+Vector存储多个投标信息

你说得对,要存储多个用户输入的投标信息,数组是可行的,但更推荐使用C++的vector容器配合自定义结构体——vector可以动态扩展大小,不用预先设定最大长度,比普通数组更灵活易用。

下面是修改后的完整代码,我会一步步说明关键改动:

1. 定义结构体封装投标信息

首先把每个投标的四个字段(标题、资金方、车辆ID、投标金额)封装成一个struct,这样每个投标就是一个独立的对象,方便存储和管理:

#include <iostream>
#include <vector>  // 需要引入vector头文件
#include <string>
using namespace std;

// 用结构体打包单个投标的所有信息
struct Bid {
    string title;
    string fundPerson;
    string vehicleId;
    float bidAmount;
};

2. 修改getBid函数返回结构体

原来的getBid用引用参数传递值,现在改成直接返回一个Bid对象,逻辑更直观:

// 获取用户输入,返回一个完整的投标对象
Bid getBid() {
    Bid bid;
    cout << "Enter Title: ";
    cin.ignore();  // 清除之前cin>>choice留下的换行符
    getline(cin, bid.title);
    
    cout << "Enter Fund: ";
    getline(cin, bid.fundPerson);  // 这里不用再ignore,上一个getline已处理换行
    
    cout << "Enter Vehicle ID: ";
    getline(cin, bid.vehicleId);
    
    cout << "Enter Bid Amount: ";
    cin >> bid.bidAmount;
    
    return bid;
}

3. 调整显示函数支持批量展示

修改单个投标的显示逻辑,新增遍历所有投标的函数:

// 显示单个投标的详细信息
void displayBid(const Bid &bid) {
    cout << "Title: " << bid.title << endl;
    cout << "Fund: " << bid.fundPerson << endl;
    cout << "Vehicle: " << bid.vehicleId << endl;
    cout << "Bid Amount: " << bid.bidAmount << endl;
    cout << "-------------------------" << endl;
}

// 批量显示所有存储的投标
void displayAllBids(const vector<Bid> &bids) {
    if (bids.empty()) {
        cout << "No bids have been entered yet!" << endl;
        return;
    }
    cout << "\n--- All Entered Bids ---\n";
    for (const auto &bid : bids) {
        displayBid(bid);
    }
}

4. 主函数用Vector存储多个投标

把原来的单个变量替换成vector<Bid>,在菜单逻辑中完成投标的添加和展示:

int main(void) {
    vector<Bid> allBids;  // 动态存储所有投标的容器
    int choice = 0;
    
    while (choice != 9) {
        cout << "\nMenu:" << endl;
        cout << " 1. Enter Bid" << endl;
        cout << " 2. Display All Bids" << endl;
        cout << " 9. Exit" << endl;
        cout << "Enter choice: ";
        cin >> choice;

        switch (choice) {
            case 1: {
                // 对应你标注的??storeinvariable??位置:把新投标加入vector
                Bid newBid = getBid();
                allBids.push_back(newBid);
                cout << "Bid added successfully!\n";
                break;
            }
            case 2:
                // 显示所有存储的投标,替代原代码的单个显示逻辑
                displayAllBids(allBids);
                break;
            case 9:
                cout << "Preparing to exit...\n";
                break;
            default:
                cout << "Invalid choice, please try again.\n";
        }
    }
    cout << "Good bye." << endl;
    return 0;  // 正常退出返回0,原代码return1不符合规范
}

关键改动说明

  • 原代码??storeinvariable??的位置:我们不再需要单个变量存储,而是用allBids.push_back(newBid)把每次输入的投标对象加入动态容器。
  • 原代码的显示逻辑:从单个投标显示改成批量遍历所有存储的投标,更符合需求。
  • 修复了原代码中多次cin.ignore导致的输入错误:只有在cin>>之后的第一个getline前需要清除换行符,后续getline会自动处理换行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:36:07