C++代码输出异常排查:输入指定数据后输出为0112而非预期值2的原因分析
问题分析与代码修正
嘿,我来帮你理清这个代码的问题所在~
核心问题:输出位置错误
你的代码逻辑其实是对的,唯一的bug就是把输出语句放在了循环内部,导致每处理一个箱子就输出一次当前的计数,而不是最后输出最终的总数量。
错误输出的原因拆解
拿你提供的输入4 1 2 2 4 5 6 6 10来说,程序的执行流程是这样的:
- 第一个箱子:
t=1, c=2,剩余容量2-1=1,不满足≥2,count保持0 → 输出0 - 第二个箱子:
t=2, c=4,剩余容量4-2=2,满足条件,count变为1 → 输出1 - 第三个箱子:
t=5, c=6,剩余容量6-5=1,不满足,count保持1 → 输出1 - 第四个箱子:
t=6, c=10,剩余容量10-6=4,满足条件,count变为2 → 输出2
这些输出连在一起就变成了0112,和你看到的结果一致。
修正后的代码
只需要把cout<<count;移到for循环的外面,等所有箱子处理完后再输出最终的计数即可:
#include <bits/stdc++.h> using namespace std; int main() { int n,x,y,i,count=0,z; cin>>n; for(i=0;i<n;i++) { cin>>x>>y; z=y-x; if(z>=2) { count++; } } cout<<count; // 移到循环外部,只输出最终结果 return 0; }
验证修正结果
用你提供的输入测试,程序会在处理完所有4个箱子后,输出最终的count值2,和你预期的正确结果一致。
内容的提问来源于stack exchange,提问作者Rachel Peters
相关产品推荐
相关产品推荐

