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