C++类中变量阈值检测与修改实现遇阻,新手求助
修复C++类中的无限循环与语法错误
问题拆解与修正步骤
1. 修复对象创建的语法错误
你在main里创建对象的写法Numbers.one;是错误的,正确的C++类实例创建方式是:
Numbers one;
2. 解决无限循环问题
Check()函数里的while(true)会无限运行,哪怕Current已经低于阈值。应该把循环条件改成仅当Current >= Limit时执行循环,满足条件就处理,不满足就自动退出:
void Check() { // 当Current达到或超过Limit时才循环处理 while (Current >= Limit) { counter++; Current -= Limit; Limit = Limit * counter; } }
3. 初始化成员变量
类中的Limit、Current、counter没有初始值,会被分配随机的垃圾值,导致逻辑混乱。添加构造函数来初始化这些变量(这里假设初始阈值Limit为100,Current初始为0,counter初始为1,避免乘以0导致阈值变为0):
// 构造函数:创建对象时自动初始化成员 Numbers() : Limit(100), Current(0), counter(1) {}
4. 调整函数调用顺序
你现在先调用Check()再给Current赋值,这时候Current是初始值(或垃圾值),逻辑完全颠倒了。应该先给Current添加数值,再执行检查逻辑。
完整修正代码
#include <iostream> using namespace std; class Numbers{ private: int Limit, Current, counter; public: // 构造函数初始化成员变量 Numbers() : Limit(100), Current(0), counter(1) {} void addCurrent(int a) { Current += a; } int getCurrent() {return Current; } int getLimit() {return Limit; } int getCounter() {return counter; } void Check() { while (Current >= Limit) { counter++; Current -= Limit; Limit = Limit * counter; } } }; int main(){ Numbers one; one.addCurrent(200); // 先给Current添加数值 one.Check(); // 再执行检查与修改逻辑 cout << one.getLimit() << "/" << one.getCurrent() << "/" << one.getCounter(); return 0; }
运行逻辑说明
- 初始状态:
Limit=100,Current=0,counter=1 - 调用
addCurrent(200)后:Current=200 - 进入
Check()循环:- 第一次循环:
200 >=100成立 →counter变为2,Current=200-100=100,Limit=100*2=200 - 第二次判断:
100 >=200不成立 → 退出循环
- 第一次循环:
- 最终输出:
200/100/2
额外优化(可选)
如果希望每次修改Current后自动执行检查,可以把Check()调用放到addCurrent()函数里,这样不用手动调用:
void addCurrent(int a) { Current += a; Check(); // 添加数值后自动触发检查 }
此时main函数只需写:
int main(){ Numbers one; one.addCurrent(200); cout << one.getLimit() << "/" << one.getCurrent() << "/" << one.getCounter(); return 0; }
内容的提问来源于stack exchange,提问作者Elia Zelotti
相关产品推荐
相关产品推荐

