C++汽车经销商程序加载txt文件生成Car类实例问题求解
问题定位
- 读取逻辑无结构化解析:当前实现仅做了纯文本打印,没有按约定格式拆分读取到的内容为对应类型的变量
- 没有关联业务逻辑:读取到的账户余额没有赋值给全局余额变量,车辆属性没有用来构造Car实例存入库存vector
- 缺少数据预处理:加载前未清空原有库存,会出现新旧数据混杂的问题
- 无异常校验逻辑:未判断文件打开状态、行内容格式合法性,遇到损坏文件容易触发程序崩溃
实现方案
按以下步骤修改switch分支6的代码即可:
- 读取文件前先清空原有库存vector,避免数据冗余
- 单独读取第一行内容,转为double类型赋值给账户余额变量
- 逐行读取后续内容,拆分出车辆名称、颜色、价格三个属性
- 用拆分得到的属性构造Car对象,存入库存vector
- 增加异常处理逻辑,兼容文件不存在、格式错误的场景
参考实现代码
#include <fstream> #include <sstream> #include <string> #include <vector> // 假设你的全局变量定义如下,可对应替换为你自己的变量名 extern double account_balance; extern std::vector<Car> car_inventory; // switch分支6的修改后代码 case 6: { std::string load_path; std::cout << "输入待加载的TXT文件路径: "; std::cin >> load_path; std::ifstream in_file(load_path); if (!in_file.is_open()) { std::cout << "错误:无法打开指定文件" << std::endl; break; } // 清空原有库存 car_inventory.clear(); std::string line; // 读取第一行账户余额 if (std::getline(in_file, line)) { try { account_balance = std::stod(line); } catch(const std::exception& e) { std::cout << "错误:第一行账户余额格式非法,加载终止" << std::endl; in_file.close(); break; } } // 逐行读取车辆信息 while (std::getline(in_file, line)) { std::istringstream ss(line); std::string car_name, car_color; double car_price; // 按空格分割字段,若使用其他分隔符可自行调整分割逻辑 if (!(ss >> car_name >> car_color >> car_price)) { std::cout << "警告:跳过格式非法的行 -> " << line << std::endl; continue; } // 构造Car对象存入库存,若你的Car构造函数参数顺序不同需对应调整 car_inventory.emplace_back(car_name, car_color, car_price); } in_file.close(); std::cout << "加载完成,当前账户余额:" << account_balance << ",库存车辆总数:" << car_inventory.size() << std::endl; break; }
如果你的Car类没有带三个参数的构造函数,可以替换成赋值的方式:
Car new_car; new_car.name = car_name; new_car.color = car_color; new_car.price = car_price; car_inventory.push_back(new_car);
内容的提问来源于stack exchange,提问作者Sorinaqueee
相关产品推荐
相关产品推荐

