为何C++程序中for与while循环操作未执行?运行异常求助
问题分析与修复方案
你的程序出现这个问题,核心原因有两个:死循环导致后续代码完全无法执行,以及循环逻辑本身完全不符合预期,另外还有数组未初始化的隐患,我一步步给你拆解:
1. Do-While循环陷入死循环,直接阻塞后续代码
不管你输入的是奇数还是偶数,对应的do-while循环都是死循环,永远跳不出来,所以后面的for循环根本没机会执行。拿偶数分支举例:
do { temp = m; temp = temp - 2; } while (temp <= m);
每次进入循环体,temp都会被重新赋值为m,然后减2得到m-2,接下来判断temp <= m——这永远是成立的(毕竟m-2肯定小于m),所以循环会无限执行下去,程序卡在这一步,自然不会执行后面的for循环,也没有其他输出。
奇数分支的do-while逻辑完全一样,同样是死循环,只是m先被减1变成偶数而已。
2. 循环逻辑完全不符合预期
看起来你应该是想生成某个序列(比如从m开始的偶数/奇数序列?),但你的do-while逻辑完全没起到作用:每次循环都把temp重置为m,然后减2,没有任何累加或者存储的操作,就算跳出循环,也不会对后续代码有任何帮助。
3. For循环的严重问题
就算前面的死循环被修复,你的for循环也会输出一堆随机值:
for (i = 0; i <= m; i++) { m = a[i]; cout << a[i]; }
a[300]是局部数组,没有初始化,里面存储的是内存里的随机垃圾值,而且你还把a[i]的随机值赋值给m,这会导致循环的终止条件i <= m变得不可预测,大概率也会出问题。
修复示例(假设你想生成从m开始递减的偶数序列)
如果你想实现的是:输入一个数,判断奇偶后,输出从该数开始的所有递减到0的偶数(奇数的话先转成前一个偶数再输出),可以改成这样:
#include <iostream> using namespace std; int main() { int m; cout << "enter a num\n"; cin >> m; if (m % 2 == 0) { cout << "even number\n"; // 从m开始递减输出偶数,直到0 for (int i = m; i >= 0; i -= 2) { cout << i << " "; } } else { cout << "odd number\n"; // 奇数先转成前一个偶数,再递减输出 m = m - 1; for (int i = m; i >= 0; i -= 2) { cout << i << " "; } } return 0; }
这个版本去掉了多余的temp和未初始化的数组,用一个for循环直接完成序列输出,逻辑清晰,也不会有死循环的问题。
内容的提问来源于stack exchange,提问作者yasi
相关产品推荐
相关产品推荐

