Newsgroup: it.comp.lang.c
Titolo: mktime() restituisce sempre -1

Salve,
ho un piccolo problema con mktime.
Ho fatto una funzione stupida in questo modo:
int arrivo() //Inserimento del nuovo cliente
{
struct tm timer;
time_t tx;
timer.tm_hour=0;
tx = mktime (&timer);
if(tx == (time_t) (-1))
printf("Errore\n");
else
printf("%d\n", timer.tm_hour);
return 1;
}
Peccato che stampi sempre "Errore".. dov'è che sbaglio? Sono sotto
linux..

 }
All'uscita dal blocco che controlla gli errori è bene far terminare la
funzione con la condizione di successo, che solitamente è "0".
Oppure volevi restituire 1 per indicare il valore "true"? In ogni caso,
se la funzione restituisce "true" in caso di successo, devi testare quando
restituire "false" (vedi commenti sopra).
Mi è sconosciuto lo scopo di questa funzione, quindi non sono in grado
di consigliarti un modo alternativo o le strutture di dati adatte a
implementarla, anche se probabilmente dovrai appoggiarti anche alla
funzione time() ( e probabilmente a ctime() ).
-- 
Non puoi insegnare qualcosa ad un uomo. You cannot teach a man anything.
Lo puoi solo aiutare   --  Galileo  Galilei  --   You can only help him
a scoprirla dentro di sé.                        discover it in himself.
Vincenzo Mercuri

 Vincenzo Mercuri
In pratica devo assegnare ad un'altra struttura il valore data
composto da gg/mm/aa e il valore ora hh:gg..pensavo che la funzione
mktime mi riempisse una struct tm con i valori corrispondenti..l'ho
interpretata male?

 interpretata male?
Da sola mktime() non aggiorna la struttura all'ora e la data corrente.
E' vero che mktime() "sistema" gli altri membri quando ne cambia uno,
ma all'inizio devi inizializzare la struttura, e invece di farlo membro
per membro, di solito si usa la funzione time() che ti da il tempo in
secondi, a partire da un'epoca (che nel caso dei sistemi Unix è l'ora
00:00:00 del giorno 01-01-1970) e poi si converte questo numero nel
formato "struct tm" attraverso la funzione localtime(). Ho scritto un
esempio che dovrebbe farti capire come si usano queste funzioni:
#include <stdio.h>
#include <time.h>
int main (void) {
     /* acquisizione ora corrente, in formato "calendar time"
      contata a partire da 00:00:00 01-01-1970 (UTC) */
     time_t secondi = time(NULL);
     /* conversione formato "calendar time" -> "broken-time"
      e acquisizione in formato "locale" */
     struct tm *t = localtime(&secondi);
     printf("\nTempo (locale) trascorso dalle 00:00:00 del 01-01-1970\n"
            "------------------------------------------------------\n"
            "secondi: %d\nminuti: %d\nore: %d\n"
            "giorni: %d\nmesi: %d\nanni: %d\n",
            t->tm_sec, t->tm_min, t->tm_hour,
            t->tm_mday, t->tm_mon, t->tm_year - 70);
     printf("\nData e ora corrente locale: %s\n", asctime(t));
     t->tm_mday += 40;
     mktime(t); /* siccome il numero 40 non rientra nel campo dei
                   dei numeri tra 1 e 31 che tm_mday puo' assumere
                   la chiamata a mktime() aggiusta gli altri membri
                   della struttura in modo tale che sommare 40 abbia
                   senso */
     printf("Data fra 40 giorni: %s\n", asctime(t));
     return 0;



Grazie mille..! :)