【发布时间】:2020-12-19 15:01:03
【问题描述】:
代码运行完美,直到它打印出 xx.00.00,它打印了两次。所有其他代码都可以正常运行,但每次都从 23.59.59 -) 00.00.00 开始打印两次。请帮助我
#include <stdio.h>
void check(int number) {
if (number < 10) {
printf("0%d", number);
}
else {
printf("%d", number);
}
}
void count(int present_time, int time_for_alarm) {
int present_hour = present_time/10000;
int present_min = (present_time/100) % 100;
int present_sec = (present_time % 100);
int alarm_hour = time_for_alarm/10000;
int alarm_min = (time_for_alarm/100) % 100;
int alarm_sec = (time_for_alarm % 100);
while (present_hour != alarm_hour) {
if (present_hour == alarm_hour && present_min == alarm_min && present_sec == alarm_sec) {
printf("ALARM");
}
else {
if (present_sec <= 60) {
present_sec++;
if (present_sec == 60) {
present_sec = 0;
present_min++;
}
if (present_min == 60) {
present_min = 0;
present_hour++;
}
if (present_hour == 24) {
present_hour = 0;
}
check(present_hour);
printf(":");
check(present_min);
printf(":");
check(present_sec);
printf("\n");
}
}
}
while (present_min != alarm_min) {
if (present_hour == alarm_hour && present_min == alarm_min && present_sec == alarm_sec) {
printf("ALARM");
}
else {
if (present_sec <= 60) {
present_sec++;
if (present_sec == 60) {
present_sec = 0;
present_min++;
}
check(present_hour);
printf(":");
check(present_min);
printf(":");
check(present_sec);
printf("\n");
}
}
}
while (present_sec != alarm_sec) {
check(present_hour);
printf(":");
check(present_min);
printf(":");
check(present_sec);
printf("\n");
present_sec++;
}
}
int main() {
int present_time, time_for_alarm;
printf("What time is it? (HHMMSS)");
scanf("%d", &present_time);
printf("What time should the alarm go off? (HHMMSS)");
scanf("%d", &time_for_alarm);
count(present_time, time_for_alarm);
printf("ALARM");
return 0;
}
【问题讨论】:
-
再次阅读 printf 的文档后,您的检查功能将变得不需要。它提供指定宽度和填充宽度的打印。
-
我看到三个地方可以打印一些东西。将“:”更改为其他字符,以便您始终可以知道哪个输出来自哪里。我打赌你会发现意想不到的两个输出来自不同的循环。
-
这个:
while (present_hour != alarm_hour) { if (present_hour == alarm_hour && present_min == alarm_min && present_sec == alarm_sec) { printf("ALARM"); }是个问题,因为根据定义在你的 while 循环中 present_hour 总是与 alarm_hour 不同,因此你的 if 条件中的代码永远不会执行 -
无关:使用
printf("%02d:%02d:%02d", hour, min, sec);代替printf("%02d:%02d:%02d", hour, min, sec);