PROBLEMA funzione fgets

DispatchCode

Utente Attivo
783
501
CPU
Intel i7 6700HQ, 2.60Ghz, 4 core 8 threads
Scheda Madre
Asustek
Hard Disk
Hitachi 7200 rpm, 1TB
RAM
16GB DDR4 (2 slot su 4)
Scheda Video
Nvidia Geforce GTX 960M, 4GB
Scheda Audio
Realtek
Internet
30Mbps/3Mbps con Eolo
Sistema Operativo
Windows 10 64bit
Vero
Nemmeno g è inizializzato.
Correttamente, il ciclo dovrebbe essere un do - while

E ogni tanto qualche riga vuota si può lasciare quando è giusta… tanto da capirci qualcosa…
Vero.
In merito a 'g' non l'ho specificato perchè anche se non inizializzata viene usata per il giorno dell'appuntamento, letto in input (si potrebbe anche evitare la variabile, per altro).

@Anghelo
Faccio inoltre notare che all'uscita dal ciclo avresti l'ultimo elemento parzialmente popolato (con solo i giorni dell'appuntamento); non so se è ciò che vuoi ottenere. In caso contrario dovresti decrementare la i di 1 unità.
 
U

Utente cancellato 359755

Ospite
Per quanto riguarda i, avete ragione, mia dimenticanza, per g invece non l'ho inizializzata perché rappresenta il giorno che deve essere inserito dall'utente e quindi ho ipotizzato non servisse; tuttavia pur inizializzando i e g il problema non si risolve. Se può risultare utile quando al posto di fgets c'era scanf il programma funzionava in tutto, potevo anche inserire i caratteri e stampava correttamente, l'unica cosa che non mi era possibile, era inserire ovviamene lo spazio.

@DispatchCode
si è fatto di proposito perché il programma definisce un'agenda suddivisa per orario e titolo e descrizione dell'impegno. Ho fatto così perché non mi venivano altri metodi per uscire dal ciclo una volta terminato di inserire gli impegni, visto che non si sa a priori e non posso "chiedere" la quantità di impegni.
Infatti quando poi stampo l'agenda ordinata, ho fatto in modo che non venga stampato l'ultimo con g=32

La variabile so che potrei evitarla ad esempio impostando che venga direttamente inserita, però è una richiesta del docente, perciò, infatti se ci fai caso il processo è ripetuto anche per mese, ora e minuti
 
Ultima modifica da un moderatore:
U

Utente cancellato 359755

Ospite
Per quanto riguarda i, avete ragione, mia dimenticanza, per g invece non l'ho inizializzata perché rappresenta il giorno che deve essere inserito dall'utente e quindi ho ipotizzato non servisse; tuttavia pur inizializzando i e g il problema non si risolve. Se può risultare utile quando al posto di fgets c'era scanf il programma funzionava in tutto, potevo anche inserire i caratteri e stampava correttamente, l'unica cosa che non mi era possibile, era inserire ovviamene lo spazio.

@DispatchCode
si è fatto di proposito perché il programma definisce un'agenda suddivisa per orario e titolo e descrizione dell'impegno. Ho fatto così perché non mi venivano altri metodi per uscire dal ciclo una volta terminato di inserire gli impegni, visto che non si sa a priori e non posso "chiedere" la quantità di impegni.
Infatti quando poi stampo l'agenda ordinata, ho fatto in modo che non venga stampato l'ultimo con g=32

La variabile so che potrei evitarla ad esempio impostando che venga direttamente inserita, però è una richiesta del docente, perciò, infatti se ci fai caso il processo è ripetuto anche per mese, ora e minuti
qualcuno può aiutarmi?
 

DispatchCode

Utente Attivo
783
501
CPU
Intel i7 6700HQ, 2.60Ghz, 4 core 8 threads
Scheda Madre
Asustek
Hard Disk
Hitachi 7200 rpm, 1TB
RAM
16GB DDR4 (2 slot su 4)
Scheda Video
Nvidia Geforce GTX 960M, 4GB
Scheda Audio
Realtek
Internet
30Mbps/3Mbps con Eolo
Sistema Operativo
Windows 10 64bit
Puoi pubblicare nuovamente il codice con le correzioni suggerite (come l'utilizzo della i come contatore)?
 
U

Utente cancellato 359755

Ospite
ecco il codice. i viene utilizzato come contatore ma non posso usarlo come condizione di uscita dal ciclo while
Codice:
int main() {
    int hh, mm, me, g, i;
    i=0;
    char strtmp[100];
    char strtmp2[300];
    Agenda Anno2020;
            printf("Il programma crea un'agenda e riodina gli impegni per data.\nQuando non si vogliono piu' inserire impegni inserire come giorno 32\n");
    while (g!=32){
        printf("\nInserire il giorno dell'appuntamento ");
            fgets(&g, 2, stdin);
                Anno2020.numero[i].n_giorno=g;
        if(g!=32){
        printf("\nInserire il mese dell'appuntamento ");
            fgets(&me, 2, stdin);
                Anno2020.numero[i].mese=me;
        printf("\nInserire a che ora c'e' l'appuntamento nel formato hh ");
            fgets(&hh, 2, stdin);
                Anno2020.numero[i].ora=hh;
        printf("\nInserire a che minuto dell'appuntamento nel formato mm ");
            fgets(&mm, 2, stdin);
                Anno2020.numero[i].minuti=mm;
        printf("\nInserire il Titolo dell'appuntamento ");
            fgets(&strtmp, 100, stdin);
                strcpy(Anno2020.numero[i].TitoloAppuntamento,strtmp);
        printf("\nInserire una descrizione dell'appuntamento ");
            fgets(&strtmp2, 300, stdin);
                strcpy(Anno2020.numero[i].DescrizioneAppuntamento, strtmp2);
    i++;   
    }
}
BubbleSort_me(Anno2020.numero, i);
stampa (Anno2020, i);
        
    system ("PAUSE");
    return 0;
}
Post automaticamente unito:

se può essere utile nel programma completo ci sono un Bubblesort con relativo scambia e uno stampa come sottoprogrammi, inoltre sono state definite 2 typedef struct di cui una inclusa nell'altra
 

Entra

oppure Accedi utilizzando

Discussioni Simili

Hot del momento