C++向量问题修复:检测输入元素超限并查找中间元素
问题分析与解决方案
问题根源
你的代码存在两个核心缺陷,导致无法检测输入元素超过9个的情况:
- 初始创建了固定大小为9的
vector,循环最多仅执行9次,完全不会读取第10个及以后的输入,自然无法判断是否超量 - 仅在遇到负数时才会调用
resize,但如果输入超过9个正数,循环跑完9次就直接结束,不会处理后续输入,最终numInts.size()永远≤9,超量检测逻辑彻底失效
修正思路
要解决这个问题,需要调整输入处理逻辑:
- 动态读取输入,不再限制容器初始大小
- 每次读取元素时实时检查数量,一旦超过9个立即标记并停止有效读取
- 即使后续遇到负数,只要之前已读入超过9个元素,依然输出指定提示
修改后的代码
#include <iostream> #include <vector> using namespace std; int main() { const int MAX_NUM = 9; vector<int> numInts; int value; bool tooMany = false; while (cin >> value) { if (value < 0) { break; // 负数为输入结束标志 } // 检查当前元素数量是否已达上限 if (numInts.size() >= MAX_NUM) { tooMany = true; // 继续读取直到负数,避免输入残留影响后续操作 while (cin >> value && value >= 0); break; } numInts.push_back(value); } if (tooMany) { cout << "Too many numbers" << endl; } else { // 题目保证输入整数数量为奇数,无需处理偶数情况 cout << "Middle item: " << numInts.at(numInts.size() / 2) << endl; } return 0; }
代码说明
- 初始创建空
vector,通过push_back动态添加元素,摆脱固定大小的限制 - 每次读取正数前先检查当前元素数量,若已达到9个则标记超量,并清空后续输入直到遇到负数
- 最终根据
tooMany标记决定输出内容,完全符合题目要求
内容的提问来源于stack exchange,提问作者Gabriel Zuniga
相关产品推荐
相关产品推荐

