PROBLEMA funzione fgets

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,210
1,846
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
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

Moderatore
Staff Forum
Utente Èlite
2,210
1,846
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
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 unito automaticamente:

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
 

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili