如何在C++中使用vector实现电梯楼层选择输入的重复校验功能
核心问题说明
你的代码存在两个关键错误导致不符合预期:
- 重复校验逻辑无效:你写的
if(selectFloor.begin(), selectFloor.end(), inputFloor)是逗号表达式,运算结果永远为真,所以无论输入是否重复都会触发弹出逻辑,这就是你输入无重复也会丢失最后一个元素的原因。你需要调用C++标准库的std::find接口实现元素存在性判断。 - 校验时机错误:你当前是等所有楼层全部输入插入vector后才做校验,且只校验最后一次输入值,不符合你实时校验每一个输入的需求,应该把校验逻辑放到每一次输入楼层之后、插入vector之前。
修正后完整代码
#include <iostream> #include <vector> #include <algorithm> // 新增,用于std::find using namespace std; int main() { std::vector<int> selectFloor = {}; int maxfloor, currentfloor = 1, select, i, k, inputFloor; cout << "How many floors do you want for your elevator? : "; cin >> maxfloor; cout << "----------This Elevator have " << maxfloor << " Floors---------" << "\n"; while(true) { cout << "select how many floor to select : "; cin >> select; bool hasDuplicate = false; // 每次输入后即时校验 for(i = 0; i < select; i++) { cout << " Select floor : "; cin >> inputFloor; // 校验当前输入是否已经存在 auto it = find(selectFloor.begin(), selectFloor.end(), inputFloor); if (it != selectFloor.end()) { cout << " Already selected" << endl; hasDuplicate = true; break; // 重复就终止输入 } selectFloor.push_back(inputFloor); } // 输出结果 cout << "\n "; for(k = 0; k < selectFloor.size(); k++) { std::cout << selectFloor.at(k) << ' '; } cout << endl; break; } return 0; }
效果验证
- 无重复输入时,会完整输出所有输入的楼层号
- 有重复输入时,会立刻提示重复,输出已输入的无重复楼层序列,完全符合你的预期输出要求。
内容的提问来源于stack exchange,提问作者woofMaranon
相关产品推荐
相关产品推荐

