C++ 时钟程序超限

C++ 时钟程序超限,c++,C++,我输入的程序要求它在6:23:59:59停止。但是,运行该程序会转到7:0:0:0。我找不到解决这个问题的办法。我尝试在while(hours>MAX_DAYS)的末尾使用if语句强制执行while结尾循环,它在6:23:59:59结束,但程序没有结束 #include <iostream> #include <cstdlib> #include <cmath> int const MAX_SECONDS = 59; int const MAX_MINUTE

我输入的程序要求它在6:23:59:59停止。但是,运行该程序会转到7:0:0:0。我找不到解决这个问题的办法。我尝试在while(hours>MAX_DAYS)的末尾使用if语句强制执行while结尾循环,它在6:23:59:59结束,但程序没有结束

#include <iostream>
#include <cstdlib>
#include <cmath>

int const MAX_SECONDS = 59;
int const MAX_MINUTES = 59;
int const MAX_HOURS = 23;
int const MAX_DAYS = 6;

using namespace std;


void print_time(int seconds, int days, int hours, int minutes);
int increment_seconds(int seconds);
void print_total_seconds(int seconds);

int main() {

    int totalSeconds = 0;
    int seconds = 0;
    int minutes = 59;
    int hours = 23;
    int days = 6;


    while (days <= MAX_DAYS) {

        seconds = increment_seconds(seconds);
        totalSeconds = increment_seconds(totalSeconds);
        while (seconds > MAX_SECONDS) {

            minutes += seconds / 60;
            seconds = seconds % 60;

            while (minutes > MAX_MINUTES) {

                hours += minutes / 60;
                minutes = minutes % 60;

                while(hours > MAX_HOURS) {

                    days += hours / 24;
                    hours = hours % 24;

                }
            } 
        }

        print_time(seconds, days, hours, minutes);
    }

    print_total_seconds(totalSeconds);
    system("PAUSE");
}
#包括
#包括
#包括
int const MAX_SECONDS=59;
int const MAX_MINUTES=59;
int const MAX_HOURS=23;
int const MAX_DAYS=6;
使用名称空间std;
无效打印时间(整数秒、整数天、整数小时、整数分钟);
整数增量_秒(整数秒);
无效打印总秒数(整数秒);
int main(){
整数秒=0;
整数秒=0;
整数分钟=59;
整小时=23;
整日=6天;
时长(天最大秒){
分+=秒/60;
秒=秒%60;
同时(分钟>最大分钟){
小时+=分钟/60;
分钟=分钟%60;
而(小时数>最大小时数){
天+=小时/24;
小时数=小时数%24;
}
} 
}
打印时间(秒、天、小时、分钟);
}
打印总秒数(总秒数);
系统(“暂停”);
}

看看当时间是6:23:59:59时代码会做什么。它将
seconds
增加到60,溢出,将
seconds
保留为0,并增加
minutes
。由于这使得
分钟数
为60,因此它会溢出到0并增加
小时数
。现在
hours
是24,它将溢出到0,并将
days
增加到7。然后打印时间(“7:0:0:0”)。循环结束,检查条件,由于天数现在大于
MAX_days
,因此停止循环


解决此问题的一种方法是在递增后但在显示之前检查时间。另一种方法是检查确切的结束时间,而不是只检查
值。

让我们假设在过去60秒内,
变量已通过
增量(秒
更新


现在
seconds
为60,它在循环更新
minute
hours
days
时进入嵌套状态。同样地,
days
是7,现在它从
中断,而程序员的秘密武器是调试器。有了调试器,您可以以自己的速度逐步检查程序,并观察程序在执行时的实际操作。您可以使用一两个断点让程序快速前进到您希望测试的点(更好的做法是,你制作一个简单的例子,只练习兴趣点,但通常你需要做一点大致的过期,以找出兴趣点是什么),然后你慢慢地在程序中寻找程序在哪里做了你意想不到的事情。意想不到的是一个bug