Programma che legge numeri da file

di il
3 risposte

Programma che legge numeri da file

Ciao a tutti, ho studiato un po' di C per l'università e mi serve di fare un programma che faccia le seguenti cose:
prenda un file di testo (contenente righe di numeri separati da tab);
per un numero di righe arbitrario (massimo 100), ne prenda una riga alla volta e ne salvi i primi 3 numeri;
stampi su schermo i numeri salvati riga per riga;

questa è il mio tentativo:

struct line {float a; float b; float c;}; /* definisce il tipo "dato" fatto da a, b, c */
typedef struct line dato;

/* funzione che restituisce il dato successivo dal file */
dato getdata(char array[], int dim, FILE *stream)
{ dato value;
fgets(array, dim, stream); /* legge la prossima riga */

fscanf(stream, "%f", & value.a); /* salva i primi 3 numeri in a, b e c */
fscanf(stream, "%f", & value.b);
fscanf(stream, "%f", & value.c);

return value;
}


int main()
{
const int dimriga=5000;
FILE *fs, *fopen();
int i,n;
dato x[100];
char nomefile[100], buff[dimriga];

printf("file da aprire: ");
scanf("%s", nomefile); /* seleziona il file da leggere */

fs = fopen(nomefile, "r");
if( fs==NULL ) {
perror("Errore in apertura del file");
EXIT_FAILURE;
} /* mette il file nello stream in modo lettura, oppure restituisce errore */

printf("Quante righe vuoi leggere? ");
scanf("%d \n", &n);

for(i=0; i<n; i++) {
x = getdata(buff, dimriga, fs);
printf("%f \t %f \t %f", x.a, x.b, x.c);
};

/* pulisce e chiude lo stream */
fflush(fs);
fclose(fs);

}


la compilazione non dà errori, tuttavia quando lo eseguo mi si ferma dopo aver messo il numero di righe voluto =( cosa ho sbagliato?

grazie a tutti!

3 Risposte

  • Re: Programma che legge numeri da file

    Avevi messo il ; al ciclo for:
    for(i=0; i<n; i++) {
    x[i] = getdata(buff, dimriga, fs);
    printf("%f \t %f \t %f", x[i].a, x[i].b, x[i].c);
    }


    Matteo
  • Re: Programma che legge numeri da file

    Non centra il punto e virgola, sta leggendo male dal file. Legge fino a 5000 caratteri o fino a che non trova un \n. Quella lettura della riga serve a niente secondo me.
  • Re: Programma che legge numeri da file

    Ciao
    Prova a togliere il carattere '\n' nella scanf.

    Cioè scrivi:
    printf("Quante righe vuoi leggere? ");
    scanf("%d", &n);

    e non:
    printf("Quante righe vuoi leggere? ");
    scanf("%d \n", &n);

    Fammi sapere se funziona.
Devi accedere o registrarti per scrivere nel forum
3 risposte