Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [C] programma che seleziona numeri da un 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[i] = getdata(buff, dimriga, fs);
    printf("%f \t %f \t %f", x[i].a, x[i].b, x[i].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!

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    45
    una cosa che o notato e' che hai messo un punto virgola dopo aver chiuso con la parentesi graffa il ciclo for
    codice:
    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);
    };
    ciao.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.