2015-10-17 8 views
-2

Я узнал о связанных со временем функциях в C от here. Они продемонстрировали функцию STRFTIME(), используя следующий пример:Специфика странного формата в функции strftime() в C

#include <stdio.h> 
#include <time.h> 

#define LEN 150 
int main() 
{ 
    char buf[LEN]; 
    time_t curtime; 
    struct tm *loc_time; 

    //Getting current time of system 
    curtime = time (NULL); 

    // Converting current time to local time 
    loc_time = localtime (&curtime); 

    // Displaying date and time in standard format 
    printf("%s", asctime (loc_time)); 

    strftime (buf, LEN, "Today is %A, %b %d.\n", loc_time); 
    fputs (buf, stdout); 
    strftime (buf, LEN, "Time is %I:%M %p.\n", loc_time); 
    fputs (buf, stdout); 

    return 0; 
} 

Я выпученный о% м спецификаторе в Е(). Он говорит, что спецификатор преобразования% m не является C, а является расширением GNU для printf. Преобразование «% m» выводит строку, соответствующую коду ошибки в errno.

Я знаю, что% спецификатор форматирования является новым в C99. Он печатает число с плавающей запятой в шестнадцатеричной форме.

Но какова цель% b и% I в этой программе? Я не понимаю, что такое использование% b &% I? Я никогда не слышал об этом. Является ли% I таким же, как% i?

ответ

5

strftime() форматирование не имеет отношения к sprintf() форматирование. Они оба используют символы % и алфавиты, но это то, где заканчивается сходство. Целая (и единственная) точка использования strftime() заключается в том, чтобы получить контроль над форматом, в котором печатается значение даты/времени, так как printf() используется для управления форматом, в который печатаются числовые и строковые данные. совершенно разные рабочие места, разумно получить разные результаты (и повторно использовать ограниченный алфавит для обозначения разных вещей) в двух функциях.

В strftime():

  • %A является полным местным названием дня недели.
  • %b - название сокращенного месяца.
  • %d - это день месяца.
  • %I - это час в 12-часовом формате.
  • %M - минута.
  • %p - индикатор AM/PM.

Из тех, %b, %I и %M не имеют никакого значения в стандартном printf(), тогда как:

  • %A печатает double в шестнадцатеричной системе счисления с заглавными буквами.
  • %d печатает int как десятичный знак.
  • %p печатает a void * адрес.
+3

К OP: Чтение любой документации было бы достаточно. Например, страница руководства по ссылке в этом ответе. –