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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 05:09:03