Почему моя вторая переменная time_t не отображается правильно - PullRequest
0 голосов
/ 03 июня 2019

Я хотел бы измерить, сколько времени занимает определенная операция, поэтому я написал следующий фрагмент кода:

for (int counter2 = 0; counter2 <= 10; counter2++) { // I'll do the test 10 times,
                                                     // for having reliable results

    time_t ltime;
    time(&ltime); // What's the time at the beginning?

    for (counter = 0; counter <= 1000000; counter++) {
        Do_Something();
    }

    time_t ltime2;
    time(&ltime2); // What's the time after having launched Do_Something()?
    printf("Times:First=[%d], Second=[%d]\n", ltime, ltime2);

}

Я ожидаю что-то вроде:

Times: First=[1559574983], Second=[1559574985]
Times: First=[1559574990], Second=[1559574999]

Вместо этого я получаю это:

Times: First=[1559574983], Second=[0]
Times: First=[1559574990], Second=[0]

Я уже отлажен, и ltime2 кажется правильным.Что я делаю не так?

Ответы [ 2 ]

4 голосов
/ 03 июня 2019

Формат "%d" не подходит в вашем случае, но вам не нужно заботиться о типе, поддерживающем time_t, просто замените

 printf("Times:First=[%d], Second=[%d]\n", ltime, ltime2);

от

std::cout << "Times:First=[" << ltime << "], Second=[" << ltime2 << "]" << std::endl;

Если по непонятной причине вы действительно хотите использовать C printf , как предложено @ Lightness Races на орбите 3 , в примечании вы можете преобразовать значение другого типа (достаточно длинное переключение) и используйте формат, совместимый с этим типом, см. Спецификатор формата для времени печати (0) в C

0 голосов
/ 04 июня 2019

Спасибо за быстрые ответы.
Для справки: последнее решение, которое я использую (объединение упомянутых упомянутых постов Stackoverflow и difftime()):

printf("First=[%ju], Second=[%ju], Difference=[%f]\n", (uintmax_t) ltime, 
                                                       (uintmax_t) ltime2, 
                                                       difftime(ltime2, ltime));
...