You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:15:23