|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
[C] stampare time_t
qual è il modo corretto secondo lo standard di stampare un valore di tipo time_t con printf senza che il gcc mi dia warnings? ho provato con %d, %u, %lld, %llu, sempre warning. debbo fare cast esplicito?
dimenticavo di specificare un piccolo dettaglio: la prof mi ha obbligato per non si sa quale motivo ad utilizzare C89 -.-' ma non credo cambi nulla per questo problema. Ultima modifica di 71104 : 20-10-2007 alle 11:54. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Dec 2005
Messaggi: 7260
|
incuriosito mi sono fatto trascinare da google su wikipedia e ho scoperto che:
Codice:
#include <stdio.h>
#include <time.h>
int main(void)
{
time_t now;
struct tm ts;
char buf[80];
// Get the current time
time(&now);
// Format and print the time, "ddd yyyy-mm-dd hh:mm:ss zzz"
ts = *localtime(&now);
strftime(buf, sizeof(buf), "%a %Y-%m-%d %H:%M:%S %Z", &ts);
printf("%s\n", buf);
return 0;
}
|
|
|
|
|
|
#3 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
non è una novità per me, il problema è che dovevo stampare proprio il valore numerico di time_t, non che ore sono
poi però ho visto che la risoluzione di un time_t è di solo un secondo, mentre a me serve qualcosa di più preciso perché ciò che devo fare è misurare il tempo di esecuzione di un algoritmo, quindi ho scoperto la funzione clock. però non riesco ad usarla: prendo il clock prima e dopo l'algoritmo ma la differenza che viene stampata risulta sempre nulla (l'ho stampata con %ld). mi sa che ho capito male cosa restituisce quella funzione. per ora sto semplicemente rimandando il problema, che significa che riupperò tra qualche giorno |
|
|
|
|
|
#4 | |
|
Bannato
Iscritto dal: Jun 2007
Messaggi: 36
|
Quote:
Codice:
#include <time.h>
#include <stdio.h>
void main(void)
{
long i;
clock_t start,end;
start=clock();
for(i=0;i<1000000000;i++)
;
end=clock();
printf("Tempo trascorso: %f secondi\n",(end-start)/CLK_TCK);
}
Ultima modifica di Lyane : 20-10-2007 alle 17:52. |
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
|
#6 |
|
Member
Iscritto dal: Apr 2007
Messaggi: 263
|
Io ho scritto una volta questo codice:
Codice:
#pragma once
#include <windows.h>
class cTimer
{
private:
LARGE_INTEGER LastTime;
LARGE_INTEGER PerformanceFrequency;
public:
cTimer();
void Reset();
double GetTimeElapsedInSeconds();
double GetTimeElapsedInMilliseconds();
};
Codice:
#include "Timer.h"
#include <windows.h>
cTimer::cTimer()
{
QueryPerformanceFrequency(&this->PerformanceFrequency);
QueryPerformanceCounter(&this->LastTime);
}
void cTimer::Reset()
{
QueryPerformanceCounter(&this->LastTime);
}
double cTimer::GetTimeElapsedInSeconds()
{
LARGE_INTEGER CurrentTime;
QueryPerformanceCounter(&CurrentTime);
double Time = (double)((UINT64)CurrentTime.QuadPart - (UINT64)this->LastTime.QuadPart)/(double)(this->PerformanceFrequency.QuadPart);
return Time;// <= 0.05 ? Time : 0.05;
}
double cTimer::GetTimeElapsedInMilliseconds()
{
LARGE_INTEGER CurrentTime;
QueryPerformanceCounter(&CurrentTime);
double Time = (double)(((UINT64)CurrentTime.QuadPart - (UINT64)this->LastTime.QuadPart)/(double)(this->PerformanceFrequency.QuadPart) * 1000);
return Time;// <= 50 ? Time : 50;
}
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
prova.c Codice:
#include <stdio.h>
#include <time.h>
int main (void)
{
time_t now = time (NULL);
printf ("%ld\n", now);
return 0;
}
non mi dà alcun warning (provato su una Slackware)
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:30.



















