Confronto tra data attuale e date presenti nel file

di oregon il
8 risposte
I dati sono in formato binario nel file? In questo caso devi aprire il file con rb

Se sono in formato testo non devi usare fread

8 Risposte

  • Non avendo a disposizione il tuo file binario dei dati non posso fare nessuna prova sensata.
  • Che dirti ... usa un sito di sharing gratuito ...
  • Questo è quello che viene visualizzato con il tuo file dati e il tuo programma (con apertura "rb" e compilato con Visual Studio 2015)

    La riga doppia alla fine è causata dall'uso della feof. Ti consiglio di sostituire nella while la fread direttamente così

    while (fread(&alimenti, sizeof(alimenti), 1, fba))
    Allegati:
    9500_582333724d44e39adbf75e13cf347b82.png
    9500_582333724d44e39adbf75e13cf347b82.png
  • Per l'ultima riga ripetuta usa la

    while (fread(&alimenti, sizeof(alimenti), 1, fba))


    Per il confronto non ho capito ... cosa dovresti fare esattamente? Le date mostrate sono future
  • Una cosa importante ... quando usi tm_year devi aggiungere 1900, quindi devi scrivere

    ora->tm_year+1900
  • I controlli con quella if per la scadenza sono sbagliati.
  • Devi fare maggiori controlli ... ad esempio
    
    if(
        (alimenti.data_scadenza.yyyy<ora->tm_year+1900) ||
        (alimenti.data_scadenza.yyyy==ora->tm_year+1900 && alimenti.data_scadenza.mm<ora->tm_mon+1) ||
        (alimenti.data_scadenza.yyyy==ora->tm_year+1900 && alimenti.data_scadenza.mm==ora->tm_mon+1 && alimenti.data_scadenza.dd<ora->tm_mday)
      )
          printf("Alimenti scaduti (DA BUTTARE!): %s\n", alimenti.nome);
    
  • Perché tu l'hai chiamata scandenza
Devi accedere o registrarti per scrivere nel forum
8 risposte