如何在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
相关产品推荐
相关产品推荐

