DOMANDA [C] Problema gestione file

saro1995

Nuovo Utente
64
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 automatically merged:

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: 24
  • 2.PNG
    2.PNG
    16.9 KB · Visualizzazioni: 23
Ultima modifica:

Andretti60

Utente Èlite
4,872
3,509
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 automatically merged:

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,114
1,869
OS
Windows 10 Pro
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 automatically merged:

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
8,925
3,805
CPU
Neurone solitario
Dissipatore
Ventaglio azionato a mano
Scheda Madre
Casalinga
RAM
Molto molto volatile
GPU
Binoculare integrata nel cranio
PSU
Pastasciutta, pollo e patatine al forno
Net
Segnali di fumo e/o tamburi
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)
 
  • Like
Reactions: Ibernato

Entra

oppure Accedi utilizzando

Discussioni Simili

Hot: Sei vaccinato? [sondaggio anonimo]

  • Primo ciclo vaccinale completo (1-2 dosi)

    Voti: 418 78.6%
  • Fatta 1a dose, in attesa della 2a

    Voti: 18 3.4%
  • Sono prenotato per la 1a dose

    Voti: 13 2.4%
  • Non so se vaccinarmi

    Voti: 14 2.6%
  • Non ho intenzione di vacciarmi

    Voti: 57 10.7%
  • Fatta anche la terza dose

    Voti: 12 2.3%