周日跑步时长统计C++程序结果异常及数组乱码问题求助
你的跑步时长统计代码问题分析与修复
嘿,我帮你排查出代码里的两个典型新手坑啦,这就给你拆解清楚:
问题1:数组出现随机无关数字的根源
你在输入跑步时长的循环里犯了个小失误——每次输入都只往times[0]里塞值,数组的其他位置(times[1]到times[4])根本没被赋值,这些内存区域原本就存着系统遗留的随机垃圾值,不管是打印校验还是后续比较,自然会出现莫名其妙的数字。
问题2:进步天数统计错误的原因
这个问题是两个小细节叠加的结果:
- 未初始化计数变量:
nr_progress是局部变量,默认值是随机的,如果初始值碰巧是-1,那统计出来的结果就会少1,这就是你输入7 9 13 12 8时预期2却得到1的核心原因。 - 循环范围不对:你的数组有5个元素(索引0到4),需要对比4组相邻元素,但你写的
for(int l=1; l<4; l++)只对比了前3组,虽然这个问题在你的测试用例里没直接影响结果,但如果输入后面有进步的情况就会出错,必须修正。
修正后的完整代码
// 程序接收按顺序记录周日跑步时长的数组,统计跑步时长超过前一天的天数 #include <iostream> #include <iomanip> using namespace std; int main(){ int nr_progress = 0; // 必须初始化计数变量,避免随机值干扰 int times[5]; cout << "请输入过去5个周日的跑步时长:" << flush; for(int i=0; i<5; i++){ cin >> times[i]; // 用循环变量i对应数组索引,给每个位置正确赋值 } // 循环范围改为l<5,覆盖所有4组相邻元素的对比 for(int l=1; l<5; l++){ if(times[l] > times[l-1]){ nr_progress += 1; } } std::cout << "进步天数为:" << nr_progress << endl; }
测试验证
当你输入7 9 13 12 8时:
- 9>7 → 计数+1(当前1)
- 13>9 → 计数+1(当前2)
- 12<13 → 不计数
- 8<12 → 不计数
最终输出2,完全符合你的预期。同时数组的每个元素现在都会被正确赋值,打印校验也不会出现随机数字啦。
内容的提问来源于stack exchange,提问作者David Smyth
相关产品推荐
相关产品推荐

