PDA

Visualizza la versione completa : [C] funzione che restituisce il mese corrente


jaso
11-02-2009, 16:18
Buonasera,

non riesco a capire come usare la libreria time.h del C per stampare a video
il mese corrente e anno corrente

Per esempio se il mese è febbraio e l'anno è 2009
vorrei poter stampare a video "febbraio 2009".

MItaly
11-02-2009, 17:03
la libreria time.h del C

time.h è un header, non una libreria.
Comunque:


#include <time.h>
#include <locale.h>

int main(void)
{
char str[255]="";
time_t t;
setlocale(LC_ALL,"");
time(&t);
strftime(str,sizeof(str),"%B %Y",gmtime(&t));
puts(str);
return 0;
}
.
Una considerazione personale: ma quanto sono brutte le funzioni di data/ora del C? Quando si decidono a cambiarle? :dottò:

jaso
11-02-2009, 17:07
grazie per la risposta!!
:)
vorrei poter salvare mese e anno su due variabili distinte per poterle riutilizzare in seguito.
Come posso fare?

oregon
11-02-2009, 17:08
Originariamente inviato da MItaly
time.h è un header, non una libreria.

Frequentate tutti la stessa universita' ? :)



Una considerazione personale: ma quanto sono brutte le funzioni di data/ora del C? Quando si decidono a cambiarle? :dottò:

Concordo ... ma non penso si cambieranno ...

oregon
11-02-2009, 17:11
Originariamente inviato da jaso
grazie per la risposta!!
:)
vorrei poter salvare mese e anno su due variabili distinte per poterle riutilizzare in seguito.
Come posso fare?

Perche' non dai un'occhiata alla struttura time_t ?

Ovvero, ai componenti della tua variabile t ?

jaso
11-02-2009, 17:12
scusate, io pensavo che i file .h fossero file di libreria

che cosa sono allora i file di libreria?

cmq ho risolto da solo per la mia precedente domanda
int main(void)
{
char mese[255]="";
char anno[255]="";

time_t t;
setlocale(LC_ALL,"");
time(&t);
strftime(mese,sizeof(mese),"%B",gmtime(&t));
strftime(anno,sizeof(anno),"%Y",gmtime(&t));
puts(mese);
puts(anno);

system("pause");
return 0;
}

MItaly
11-02-2009, 17:26
Originariamente inviato da jaso
scusate, io pensavo che i file .h fossero file di libreria

che cosa sono allora i file di libreria?
I file .h sono header, che contengono i prototipi delle funzioni che si trovano in altri file .c da compilare o già compilate nelle librerie statiche. Queste ultime hanno solitamente estensione .lib o .a, e contengono codice già compilato che viene unito con i vari moduli oggetto generati dal compilatore al momento del linking.
In pratica: nel file .h ci sono le dichiarazioni che spiegano al compilatore come sono fatte le funzioni che intendi usare. Se il compilatore non trova subito la definizione di queste funzioni nel tuo file .c, inserisce nel modulo oggetto che va a generare un appunto del tipo "qui manca una funzione; linker, pensaci tu". Il linker si prende in pasto tutti i moduli oggetto (derivanti dalla compilazione di tutti i file .c) e le librerie (che sono più o meno analoghe ai moduli oggetto, ma che sono già pronte compilate), e li mette insieme, rimpiazzando tutti questi "appunti" del compilatore con chiamate al codice effettivo di queste funzioni che trova negli altri moduli oggetto o nelle librerie. Alla fine di tutto il processo viene generato l'eseguibile.


Originariamente inviato da oregon
Frequentate tutti alla stessa universita' ? :)

:D


Concordo ... ma non penso si cambieranno ...
Be', ma io non capisco cosa avessero nel cervello quando hanno fatto il C99: tanto gli costava dichiarare deprecate tutte queste funzioni di time.h (funzioni di libreria standard non rientranti che restituiscono puntatori a buffer interni... pazzi criminali! :oVVoVe: ) nonché le funzioni non sicure (gets in primis, e tutte le altre a seguire) e introdurre delle varianti sicure (tipo le versioni _s di Visual C++), invece di inventarsi un boolean non compatibile con il C++? Mah...

oregon
11-02-2009, 17:29
Originariamente inviato da MItaly
Mah...

Oltre ad introdurre cose strane come

int a[n];

con n variabile che, secondo me, sta incasinando un sacco di studenti ...



P.S. Volevo scrivere "andate tutti alla stessa università" poi ho scritto "frequentate" ma "alla" è rimasto ... ovviamente e'

"Frequentate tutti la stessa università" ?

:D

jaso
11-02-2009, 17:38
grazie ho capito! :)
arrivederci

MItaly
11-02-2009, 18:07
Originariamente inviato da oregon
Oltre ad introdurre cose strane come

int a[n];

con n variabile che, secondo me, sta incasinando un sacco di studenti ...

Ma vedi, questo non sarebbe neanche troppo malvagio se venisse spiegato agli studenti come funziona (spiegando magari come funzionano in generale le variabili automatiche, cosa sono stack frame e stack pointer) e quando è il caso di preferirlo all'allocazione nell'heap. Il problema è che questi "dettagli" non vengono mai spiegati nei libri introduttivi e tantomeno all'università (come abbiamo visto negli ultimi thread... :D ).

Loading