DOMANDA [C] Problema gestione file

saro1995

Nuovo Utente
82
3
nella chiamata caricafile, all'interno del ciclo, stampa gli articoli che prendi e vedi cosa ti da
Si ho già fatto... infatti ci sta una funzione stampa per verificare appunto il corretto funzionamento del file. Grazie a quella funzione vedo che il file non funziona.
Post unito automaticamente:

nella chiamata caricafile, all'interno del ciclo, stampa gli articoli che prendi e vedi cosa ti da
Ti allego l'output così da capirci meglio.... come ben vedi il risultato è penoso e inguardabile. Comunque per favore spiegami per quale motivo non devo usare system("PAUSE") e system("CLS") perchè ancora non l'ho capito. A dirti la verità li usavo in quanto in un video il ragazzo che spiegava le liste faceva così...
 

Allegati

  • 1.PNG
    1.PNG
    21.3 KB · Visualizzazioni: 33
  • 2.PNG
    2.PNG
    16.9 KB · Visualizzazioni: 32
Ultima modifica:

Andretti60

Utente Èlite
6,440
5,091
Innanzitutto togli quei system pause che sono chiamate molto onerose.
Poi metti delle printf che fungono da log per capire cosa fa la funziona carica e se legge effettivamente 4 articoli
Un universtitario non dovrebbe mettere dei printf per trovare gli errore. Userebbe il debugger. Metti un breakpoint all'inizio della funzione CaricaArticoli, avanza una istruzione alla volta e controlla che il programma legga correttamente i dati e li inserisca correttamente nella lista. Controllare il funzionamento di un programma con dei printf (che poi andrebbero tolti, e buona fortuna ricordarseli tutti a meno di non taggarli) si deve limitare solo quando il debugger non e' a disposizione (tipo una applicazione installata su un computer senza debugger).
Prima cosa da imparare per programmare: usare il debugger. E' il nostro amico, e il primo, unico, indispensabile strumento a nostra disposizione. Ci passiamo il 99% della nostra vita.
Post unito automaticamente:

La prima cosa che vedo che e' sospetta e' che nella lettura del file mischi chiamate fscanf e fgets, che e' sempre una cosa da evitare. O unsi una, o usi l'altra. In genere io per leggere un file di testo uso solo fgets per leggere una intera riga del file, la metto in una stringa, e poi uso sscanf per estrarre i vari valori da quella stringa nel caso ce ne siano piu' di uno (come nel tuo caso).
 

Ibernato

Utente Èlite
4,328
2,047
OS
Windows 10 Pro / Ubuntu 22.04
Un universtitario non dovrebbe mettere dei printf per trovare gli errore. Userebbe il debugger. Metti un breakpoint all'inizio della funzione CaricaArticoli, avanza una istruzione alla volta e controlla che il programma legga correttamente i dati e li inserisca correttamente nella lista. Controllare il funzionamento di un programma con dei printf (che poi andrebbero tolti, e buona fortuna ricordarseli tutti a meno di non taggarli) si deve limitare solo quando il debugger non e' a disposizione (tipo una applicazione installata su un computer senza debugger).
Prima cosa da imparare per programmare: usare il debugger. E' il nostro amico, e il primo, unico, indispensabile strumento a nostra disposizione. Ci passiamo il 99% della nostra vita.
Post unito automaticamente:

La prima cosa che vedo che e' sospetta e' che nella lettura del file mischi chiamate fscanf e fgets, che e' sempre una cosa da evitare. O unsi una, o usi l'altra. In genere io per leggere un file di testo uso solo fgets per leggere una intera riga del file, la metto in una stringa, e poi uso sscanf per estrarre i vari valori da quella stringa nel caso ce ne siano piu' di uno (come nel tuo caso).

Non credo sappia usare il debugger, per questo gli ho optato la strada facile :)
 

BAT

Moderatore
Staff Forum
Utente Èlite
22,923
11,563
CPU
1-Neurone
Dissipatore
Ventaglio
RAM
Scarsa
Net
Segnali di fumo
OS
Windows 10000 BUG
spiegami per quale motivo non devo usare system("PAUSE") e system("CLS") perchè ancora non l'ho capito. A dirti la verità li usavo in quanto in un video il ragazzo che spiegava le liste faceva così...
perché non sono istruzioni standard né in C né in C++ ma dipendono dal compilatore e dal sistema operativo in uso.
Per "fermare" l'uoutput a video in C ti basta aggiungere l'istruzione
getchar();
che aspetta la lettura di un carattere; per motivi su cui non mi dilungo talvolta potrebbero essere necessarie 2 chiamate consecutive (la prima per "smaltire" l'ultimo carattere acquisito in precedenza, di solito un fine riga \n, la seconda per aspettare un ulteriore carattere)
 
  • Mi piace
Reazioni: Ibernato

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

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili