Problema salvataggio su un file

di il
9 risposte

Problema salvataggio su un file

Buonasera ragazzi, ho un grande dubbio, che non riesco a risolvere.

Nel breve dovrei salvare una DATA ed un ORARIO, al momento faccio nel seguente modo :

1) DATA : inserisco singolarmente GG, MM, AAAA, e poi salvo come char per poi salvare sul file

2) ORARIO : inserisco singolarmente HH,MM e poi salvo come char per poi salvare sul file

snprintf(data_In, 11, "%d/%d/%d", giorno_In, mese_In, anno_In);
            
            strcpy(nuovo_Nodo -> data, data_In);

snprintf(ora_In, 5, "%d|%d", hh_In, mm_In);
        strcpy(nuovo_Nodo -> ora, ora_In);

Il problema lo riscontro nell'orario in quanto come CHAR mi salva oltre l'orario la lettera “d” come a seguire (caso in cui ore_In = 17 e mm_In = 55)

17|55d

Con la DATA non ho problemi in quanto salva nel formato desiderato ovvero, come nel caso in cui gg=12, mese = 1, anno = 2023:

12/1/2023

Spero di essere stato chiaro e spero siate in grado di aiutarmi. Grazie mille ancora

9 Risposte

  • Re: Problema salvataggio su un file

    Ma l'hai seguito il consiglio del libro? Lo sai cos'è un char? Che poi anche ammesso il tuo dubbio, 55 come carattere sarebbe '7', mentre 'd' è 100. Non è che ti è sfuggita una d in più nel codice?

  • Re: Problema salvataggio su un file

    Grazie per la risposta. Si, so cosa è una char,non capisco come mai riscontro questo problema solo nell ORA e non nella DATA. 

    Mi sembra di aver scritto tutto correttamente. Quella ‘d’ non capisco prorpio da dove esca, non ho punti in cui si possa essere aggiunta. 

  • Re: Problema salvataggio su un file

    Devi postare il codice completo se vuoi una mano. Magari hai un buffer sporco e ti prende la d di una scrittura precedente

  • Re: Problema salvataggio su un file

    In breve il codice è il seguente :

    // DATA
        bool data_Corr = true;
    
        
         do {
                if (data_Corr == false) {
                
                    printf("\t \t \t \n \n Attenzione! \n \n");
                    printf("\t \t \t La data inserita deve essere succesiva a quella corrente.\n");
                }
    
                    printf("\t \t \t \t INSERIMENTO NUOVO SPETTACOLO \n \n ");
    
                    do {
                        if (!data_CorrettaIn) {
    
                            printf("\n\n \t \t \t  Attenzione!\n");
                            printf("\t \t \t La data inserita non e' corretta. Si prega di inserirla nuovamente. \n \n");
                        }
    
                        do {
                            printf("\t \t \t Giorno : ");
                            scanf("%d", &giorno_In);
                        } while (giorno_In < 1 || giorno_In > 31);
    
                        do {
                            printf("\n\t \t \t Mese : ");
                            scanf("%d", &mese_In);
                        } while (mese_In < 1 || mese_In > 12);
    
                        printf("\n\t \t \t Anno : ");
                        scanf("%d", &anno_In);
    
                        data_CorrettaIn = verifica_Data(giorno_In, mese_In, anno_In);
    
                    } while (!data_CorrettaIn);
    
                    data_Corr = (differenza_DateOggi(giorno_In, mese_In, anno_In) >= 0);
                    
            } while (!data_Corr);
    
                while ('\n' != getchar());
    
                snprintf(data_In, 11, "%d/%d/%d", giorno_In, mese_In, anno_In);
                
                strcpy(nuovo_Nodo -> data, data_In);
    
        // ORA
        bool ora_Corr = true;
    
         do {
                if (ora_CorrettaIn == false) {
                    clear_Console();
                    titolo();
                    
                    printf("\t \t \t \n \n Attenzione! \n");
                    printf("\t \t \t L'ora' inserita non e' corretta. Riprovare. \n \n");
                }
    
                    printf("\t \t \t Ora : ");
                    scanf("%d", &hh_In);
                    
                    printf("\n\t \t \t Minuti: ");
                    scanf("%d", &mm_In);
                    
                    while ('\n' != getchar());
                        
                    ora_CorrettaIn = verifica_Ora(hh_In, mm_In);
    
            } while (!ora_CorrettaIn);
    
            snprintf(ora_In, 5, "%d|%d", hh_In, mm_In);
            strcpy(nuovo_Nodo -> ora, ora_In);
    
    	}
    			
    	// Verifico se nel file ci sono utenti registrati (LISTA VUOTA o LISTA NON VUOTA)
        fseek(fp, 0, SEEK_END); 
        long size = ftell(fp); 
        		
        if (size == 0) {
    
    		fprintf(fp, "%d,%d,%s,%s,%s,%d,%d", nuovo_Nodo -> sala, nuovo_Nodo -> id, nuovo_Nodo -> titolo, nuovo_Nodo -> data,
                       nuovo_Nodo -> ora, nuovo_Nodo -> posti_disponibili, nuovo_Nodo -> posti_occupati); 
                        
    	} else { //filE NON VUOTO : controllare ID
    
    
            fprintf(fp, "\n%d,%d,%s,%s,%s,%d,%d", nuovo_Nodo -> sala, nuovo_Nodo -> id, nuovo_Nodo -> titolo, nuovo_Nodo -> data,
                       nuovo_Nodo -> ora, nuovo_Nodo -> posti_disponibili, nuovo_Nodo -> posti_occupati); 
        }
    

    La parte relativa alla DATA funziona correttamente, l'ORA invece mi crea la “d” finale nel salvataggio su file, ad esempio se inserisco 17 e 15 sul file compare “17|15d”.

  • Re: Problema salvataggio su un file

    Per completezza queste sono alcune righe salvate nel file in cui si può notare il problema riscontrato :

    											2,2,AAA,23/12/2024,17|15d,100,0
    											2,3,AAA,12/12/2025,17|15d,100,0
  • Re: Problema salvataggio su un file

    Prendi un debugger e attaccati al codice, perché probabilmente c'è qualcosa che non funziona da qualche parte al di fuori del segmento di codice che hai postato.

    Prova a fare

    memset(ora_In, 0, sizeof(ora_In));
    snprintf(ora_In, 5, "%d|%d", hh_In, mm_In);
  • Re: Problema salvataggio su un file

    Poi comunque per l'ora dovresti prevedere 6 caratteri, così come hai fatto 10+1 per la data

  • Re: Problema salvataggio su un file

    Come ribadito da Weierstrass il problema è solo dovuto al fatto che non hai previsto lo spazio per il teeminatore. Per la data 10+1 e per l'ora 5+1

    È un errore comune di chi inizia non tenere conto del terminatore delle stringhe

  • Re: Problema salvataggio su un file

    Risolto, grazie mille. Bisognava aumentare di 1 la string, anche se era una operazione che avevo fatto tempo fa, ma sicuramente avevo lasciato qualche refuso. Grazie ancora

Devi accedere o registrarti per scrivere nel forum
9 risposte