while循环超时无结果求助:计算三位数以内倍数求和代码故障
解决你的while循环死循环及计算逻辑问题
嘿,我一眼就看到了导致程序死循环和计算错误的几个关键问题,咱们一个个捋清楚:
1. 导致死循环的直接元凶:while语句后的多余分号
你写的while (num < 100) ; 这里的分号会让循环体变成空语句,后面的大括号和这个循环完全没关系!程序会一直重复判断num < 100,但因为循环体里根本没修改num的值,这个条件永远成立,自然就卡死了。
2. 倍数计算的逻辑错误
你要累加的是输入数字的倍数(比如输入5就加5、10、15...),但你现在用的是num++,也就是每次把num加1,这完全偏离了需求。正确的做法应该用一个临时变量来追踪当前的倍数,每次加上原数字,直到超过100。
3. 变量作用域与初始化问题
在calculate函数里,你先声明了double cal;,但之后在大括号里又重新定义了int cal = num;——这个内部的cal是局部变量,和外面的double cal没有任何关系,最后你返回的是未初始化的double cal,结果肯定是乱码。而且你根本没做累加操作,只是给cal赋值了当前num的值。
4. 无关但必须修正的小问题
display函数声明返回double,但函数里没有任何return语句,这会导致未定义行为,应该把它改成void类型(不需要返回值)。
下面是修正后的完整代码,我还优化了变量命名让逻辑更清晰:
#include <iostream> using namespace std; // 获取用户输入的数字 double getnum() { double num; cout << "What multiples are we adding? "; cin >> num; return num; } // 计算三位数以内倍数的总和 double calculate(double num) { double sum = 0; // 初始化总和为0 double current = num; // 从第一个倍数开始 while (current < 100) { // 去掉多余的分号,让大括号成为循环体 sum += current; // 累加当前倍数 current += num; // 跳到下一个倍数 } return sum; } // 展示结果,改成void类型不需要返回值 void display(double num, double sum) { cout << "The sum of multiples of " << num << " less than 100 is: " << sum << endl; } int main() { double num = getnum(); double total = calculate(num); display(num, total); return 0; }
现在输入5的话,程序会正确计算5+10+15+...+95的总和,不会再陷入死循环啦。
内容的提问来源于stack exchange,提问作者Cpt. Brandon
相关产品推荐
相关产品推荐

