如何将算法生成的数值存入数组并用于校验用户输入
问题原因分析
- 第一种写法中,
total_events_by_year是循环内部的局部变量,每次循环迭代都会重新创建、赋值,迭代结束后立即销毁,不会保留历史数值,自然无法作为一组独立值使用。 - 第二种写法中,你在循环内部每次都定义了长度为1的局部数组,直接输出数组名时,数组名会隐式转换为指向首元素的指针,因此输出的是内存地址;且该数组同样每次迭代后销毁,无法存储所有生成的数值。
实现方案
优先使用C++标准库的std::vector动态容器存储数值,无需提前手动指定长度,使用更灵活:
- 首先引入对应头文件:
#include <vector>
- 在循环外部声明容器,循环内将生成的数值插入容器:
// 循环外声明存储所有有效事件的vector std::vector<int> valid_events; for (int e = 1; e <= max_event_number; e++) { int total_events_by_year = first_event + (e * event_occurence); // 将生成的数值插入容器末尾 valid_events.push_back(total_events_by_year); }
- 后续校验用户输入时,直接遍历容器判断即可,示例:
int user_input; std::cin >> user_input; bool is_valid = false; for (int event : valid_events) { if (event == user_input) { is_valid = true; break; } } if (is_valid) { std::cout << "输入为有效事件年份" << std::endl; } else { std::cout << "输入为无效值" << std::endl; }
如果一定要用原生数组实现,需要提前在循环外申请长度为max_event_number的数组,循环内给对应下标赋值:
// 提前申请足够长度的数组 int* valid_events = new int[max_event_number]; for (int e = 1; e <= max_event_number; e++) { // 注意数组下标从0开始 valid_events[e-1] = first_event + (e * event_occurence); } // 使用完后需要手动释放内存避免泄漏 delete[] valid_events;
内容的提问来源于stack exchange,提问作者Alex Pina
相关产品推荐
相关产品推荐

