C++使用for循环对int vector乘60新增3个值仅输出2次问题求解
代码问题原因及修正方案
错误点说明
- 核心错误:循环控制变量
i被意外修改
你在循环体中直接给控制循环次数的变量i赋值为计算得到的倍数结果,直接打乱了循环计数逻辑:- 第一次循环初始
i=0,满足i<=3的判断条件 - 执行
i = seconds.at(i) * 60后,i的值被改写为60 - 执行
push_back后,进入for循环的增量步骤i++,i变为61 - 第二次判断
i<=3时61<=3不成立,循环直接终止,最终仅新增了1个元素,加上初始的1个一共2个,所以只会输出2次结果
- 第一次循环初始
- 次要错误:循环次数设置不符合需求
你需要新增3个元素,循环应该执行3次,使用i<=3的条件会执行4次,不符合预期。
修正后代码
修正思路:用单独的变量存储计算得到的新值,不要修改循环控制变量,调整循环次数条件。
#include <iostream> #include <vector> int main() { std::vector <int> seconds = { 1 }; // 循环3次,新增3个元素 for (int i = 0; i < 3; i++) { // 用单独变量存储新值,不要修改循环控制变量i int new_val = seconds.at(i) * 60; seconds.push_back(new_val); } for (int i = 0; i < seconds.size(); i++) { std::cout << seconds[i] << std::endl; } return 0; }
运行后会输出4个值:1(秒)、60(分)、3600(小时)、216000,符合你要执行3次乘60、新增3个元素的需求。
内容的提问来源于stack exchange,提问作者NewbCoder
相关产品推荐
相关产品推荐

