Info libreria ctime

di il
4 risposte

Info libreria ctime

Ciao a tutti, sono al 3° anno del tecnico informatico e sono giunto davanti ad uno dei problemi che sono sul mio testo scolastico, il quale mi diceva di creare una funzione booleana che controlli se una persona può votare conoscendo il suo anno di nascita ( si consideri l'anno attuale come costante).
Ora il problema sta nel fatto che dopo aver fatto io il mio codice avevo qualche problema con le istruzioni di output e quindi ho controllato la soluzione e nella soluzione c'era la seguente porzione di codice relativa alla funzione:
bool Controllovoto(int nascita){
    int annoc;
    time_t now = time(0));
    tm*ltm = localtime(&now);
    annoc = 1900 + ltm->tm_year;
    
    if(annoc-nascita>18){
        return true;
        }
        else {return false;
        }
}
ora io vorrei capire (sempre se siete cosi gentili da spiegarmelo ) cosa significano quei time_t now tm*ltm etc perchè di questa libreria so solo che gestisce il tempo ma io vorrei capire come posso sfruttarla cioè cosa rappresentano i valori tipo "time_t now = time(0));" che vuol dire quello "0" ?
Grazie per eventuali risposte !

4 Risposte

  • Re: Info libreria ctime

    Perchè vuoi leggere la data corrente se ti viene richiesto
    si consideri l'anno attuale come costante
    Comunque, nessuno può spiegare meglio di questi


    la funzione time() ti ritorna il numero di secondi dal 1/1/70 che poi trasformi in forma "umana" richiamando la localtime().
  • Re: Info libreria ctime

    No, io sinceramente il mio l'avevo fatto con la richiesta di inserire l'anno attuale, e poi metterlo come costante visto che nella traccia c'era specificato...
    E' uscito questo problema perchè sono andato a guardare la soluzione visto che avevo problemi con le istruzioni di return true e false per la funzione booleana e quindi guardando questa benedetta soluzione non ci capivo quasi niente per la mancanza di alcune conoscenze (ctime).
    Il fatto è che io già ci ho guardato ieri googlando su quel sito proprio e non ho capito quando fa l'istruzione time_t now = time(0); questa qui sarebbe la dichiarazione del tipo della variabile now però non ho capito che fa time(0) è una funzione ? a che serve?
    poi tm*ltm = localtime(&now) che vuol dire che una moltiplicazione tra var è uguale al valore della funzione con passaggio con referenza di now?!?

    e poi si calcola in fine annoc facendo 1900+ltm->tm_year; bene qua non ho capito cos'è quel 1900 e poi l'addizione tra ltm e il simbolo ->tm_year !?!?!?

    Scusami ma sono un po in confusione in merito a queste istruzioni mai viste prima!
  • Re: Info libreria ctime

    time_t now = time(0));
    time_t now = time(0);
    tm*ltm = localtime(&now);
    struct tm *ltm = localtime(&now);
    l'istruzione time_t now = time(0); questa qui sarebbe la dichiarazione del tipo della variabile now però non ho capito che fa time(0) è una funzione ? a che serve?
    "time_t" è il tipo di variabile con cui si rappresenta il num di secondi passati da mezzanotte del 1/1/1970 UTC.
    "time(0)" è la funzione che restituisce tale numero (uguale a "time(NULL);" ).
    poi tm*ltm = localtime(&now) che vuol dire che una moltiplicazione tra var è uguale al valore della funzione con passaggio con referenza di now?!?
    "tm" è una struttura di <ctime> adibita al salvataggio di informazioni sulla data. In questo modo dichiari un puntatore a tale struttura.
    e poi si calcola in fine annoc facendo 1900+ltm->tm_year; bene qua non ho capito cos'è quel 1900 e poi l'addizione tra ltm e il simbolo ->tm_year !?!?!?
    "ltm->tm_year" fa riferimento all'elemento "tm_year" della struttura puntata da "tm" (quella che hai inizializzato prima con "localtime()" ). Esso rappresenta il numero di anni passati dal 1/1/1900.

    Con questa espressione fai "anno corrente"-"anno di nascita", e se la differenza è >18 ritorna TRUE;


    PS: trovi tutto su .
    Se ugualmente non capisci, ti consiglio di rivederti la teoria su puntatori, strutture, operazioni aritmetiche e logiche
  • Re: Info libreria ctime

    Grazie mille, è che i puntatori non sono stati ancora fatti perchè penso vengano dopo nel libro (uso c++ della Atlas) comunque grazie mille di nuovo approfondirò da me eventualmente se per caso sono stati saltati in modo approfondito
Devi accedere o registrarti per scrivere nel forum
4 risposte