C++循环与条件语句异常:多测试用例仅执行else块问题排查
C++代码循环与条件语句问题排查
你的代码如下:
#include <iostream> using namespace std; int main() { int i,t,km,sum=0; std::cin >> t; for( i=0;i<t;i++){ cin>>km; } for(i=0;i<t;i++){ if(km>300){ sum=km*10; cout<<sum; } else if(km<=300){ sum=300*10; cout<<sum; } else{ cout<<"wrong!"; } } return 0; }
问题分析
- 第一个循环仅保留最后一次输入值:第一个
for循环执行t次输入,但每次都把值赋给同一个km变量,前面输入的所有测试用例值都会被覆盖。第二个循环执行t次时,每次判断的都是最后一次输入的km值,根本没处理前面的测试用例。 - else分支永远不会触发:
km要么大于300,要么小于等于300,这两个条件已经覆盖了所有整数情况,else分支完全冗余,不可能被执行。你觉得t>1时执行else分支是误解,实际是第二个循环重复输出最后一个km对应的结果,和预期不符。 - 输出无换行:每次
cout后没加换行符,多个结果会连在一起,看起来混乱。
修复方案
方案1:合并输入与处理循环(推荐)
直接在输入每个测试用例后立即处理并输出,不需要额外存储:
#include <iostream> using namespace std; int main() { int t, km, sum; cin >> t; for (int i = 0; i < t; i++) { cin >> km; // 简化条件判断,不需要else if sum = (km > 300) ? km * 10 : 300 * 10; cout << sum << endl; } return 0; }
方案2:用数组存储所有测试用例
如果需要后续对所有测试用例做其他操作,可以先把所有输入存到数组里再处理:
#include <iostream> #include <vector> // 用vector比固定数组更灵活安全 using namespace std; int main() { int t; cin >> t; vector<int> km_list(t); // 输入所有测试用例 for (int i = 0; i < t; i++) { cin >> km_list[i]; } // 逐个处理输出 for (int km : km_list) { int sum = (km > 300) ? km * 10 : 300 * 10; cout << sum << endl; } return 0; }
内容的提问来源于stack exchange,提问作者Meenaz
相关产品推荐
相关产品推荐

