C++租车系统输入合法车型(如Alto)却提示不可用的原因排查
C++租车系统问题修复方案
核心问题分析
- 实例数据不共享:main函数中创建了
Car c1和RentalSystem r1两个独立对象,c1输入的车型名称仅存在于自身的name成员中,r1的name为空值,导致CheckInput()无法匹配有效车型。 - 循环逻辑错误:
CheckInput的循环中,只要第一次匹配失败(比如输入Mercedes时,i=0的Alto不匹配),就会直接执行else分支输出错误并终止循环,不会继续检查后续车型。 - 函数调用语法错误:
c1.ShowDetails;缺少括号,正确写法应为c1.ShowDetails();,否则无法触发函数执行。
修复后的完整代码
#include<iostream> #include<string> using namespace std; class Vehicle{ public: string name; int seats; int model, totalrent; }; class Car:public Vehicle{ public: string AvailableCars[4] = { "Alto", "Mercedes", "Corolla", "Audi" }; int CarStock[4] = { 4, 4, 4, 4 }; // 各车型库存 void ShowDetails(){ cout << "Available Cars are:\n"; for(int i=0;i<4;i++){ cout << AvailableCars[i] << endl; } cout << "Enter the car name you would like to rent: "; cin >> name; } void CheckInput(){ bool found = false; for(int i=0;i<4;i++){ if(AvailableCars[i] == name){ found = true; cout << "Calculating rent!\n"; // 根据车型索引设置座位数 switch(i){ case 0: seats = 5; break; case 1: seats = 2; break; case 2: seats = 3; break; case 3: seats = 4; break; } totalrent = seats * 10000; cout << "Total Rent: " << totalrent << endl; break; } } // 遍历完成后判断是否找到匹配车型 if(!found){ cout << "Sorry this car isn't available!" << endl; } } }; class RentalSystem:public Car{ public: void CalculateRent(){ CheckInput(); } }; int main(){ int choice; cout << "Enter choice pls (1 for rent car): "; cin >> choice; if(choice == 1){ RentalSystem r1; // 仅需一个实例即可完成流程 r1.ShowDetails(); r1.CalculateRent(); } else if(choice != 1 && choice != 2){ cout << "Sorry choose between available options." << endl; } return 0; }
关键修复点说明
- 统一实例:只创建一个
RentalSystem实例,确保输入的车型名称能被后续检查逻辑直接读取。 - 优化循环逻辑:用
found标记记录匹配结果,遍历所有车型后再输出错误信息,避免提前终止循环;同时用switch替代冗余的else if分支,简化代码结构。 - 修正语法错误:补全函数调用的括号,确保
ShowDetails正常执行。
内容的提问来源于stack exchange,提问作者Zaynab Azam
相关产品推荐
相关产品推荐

