#c #struct #clock
#c #структура #часы
Вопрос:
Целью моего кода было иметь возможность переключаться между стандартным и военным временем, если при его выполнении был тег.
В военное время в конце должно быть «24», а в стандартное время в конце должно быть «am» или «pm».
Кажется, я могу получить логику ampm, но она показывает 24, а не am или pm — только 24. Что-то не так с модуляцией в моем большем блоке else?
void show(struct tm *dateinfo, int ampm)
{
char timestring[9];
char modestring[3];
int hour;
hour = dateinfo->tm_hour;
if ( ampm == 0 )
{
sprintf(timestring,
"d:d:d",
hour,
dateinfo->tm_min,
dateinfo->tm_sec);
sprintf(modestring, "24");
}
else
{
if ( hour < 12 )
{
if ( hour == 0 )
{
hour = 12;
}
sprintf(modestring, "am");
}
else
{
if ( hour == 12 )
{
hour = 12;
}
else
{
hour = hour % 12;
}
sprintf(modestring, "pm");
}
}
printf("r%s %s", timestring, modestring);
fflush(stdout);
}
Ответ №1:
Вы устанавливаете только timestring
в if ( ampm == 0 )
блоке. Переместите его после if
блока после настройки hour
.
if ( ampm == 0 )
{
sprintf(modestring, "24");
}
else if ( hour < 12 )
{
if ( hour == 0 )
{
hour = 12;
}
sprintf(modestring, "am");
}
else
{
if ( hour > 12 )
{
hour = hour % 12;
}
sprintf(modestring, "pm");
}
sprintf(timestring,
"d:d:d",
hour,
dateinfo->tm_min,
dateinfo->tm_sec);
Комментарии:
1. По какой-то причине он по-прежнему показывает 24, я бы разделил этот метод на 2, но мой инструктор хочет, чтобы он был тем, в который я верю
2. @Mochi Измените значение
r
наn
в последнемprintf
. Каждая новая строка, которую вы пишете, перезаписывает предыдущую.