Логика военного времени и стандартного времени работает, но строка индикатора времени не работает

#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 . Каждая новая строка, которую вы пишете, перезаписывает предыдущую.