Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2016
    Messaggi
    2

    Lettura,acquisizione e salvataggio delle righe(contenenti frasi) di un file di testo in una matrice

    Salve a tutti,
    Non riesco a leggere e salvare le righe di un file di testo(ad ogni riga una frase diversa) in una matrice.Inoltre ho provato a implementare il programma a funzioni, ma dava molti errori.
    Ecco il codice che ho utilizzato:

    codice:
    #include <iostream>
    #include <stdio.h>
    
    #define n_pat 53
    #define n_car 170
    using namespace std;
    
    int main()
    {
        FILE *fp;
        char c;
        char a[n_pat][n_car];
        int i,j;
        fp=fopen("c\\test\\pronto_soccorso.txt", "r");
        i=0;
        j=0;
        while((c = getc(fp)) != EOF){
            if (c==10) { j++;i=0;}
                else { a[j][i]=c;
                        i++;
                    }
        }
        fclose(fp);
        for(int i = 0; i < n_car; i++) {
           for(int j = 0; j < n_pat; j++) {
                cout << a[i][j] << " ";
           }
        cout << endl;
          }
    }
    Ultima modifica di LeleFT; 19-12-2016 a 11:14 Motivo: Aggiunti i tag CODE

  2. #2
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    Ciao

    Il codice sorgente deve essere racchiuso nel tag code

    Ci sono funzioni più comode per leggere un file di testo, come la fgets(). Non è molto frequente dover leggere un file carattere per carattere "se non proprio necessario", ma visto che ti limiti a inserirlo in una matrice, non c'è motivo di usare la getc().


    Nel tuo programma non aggiungi un terminatore stringa '\0', le stringhe in C terminano con questo carattere, viene aggiunto dalle funzioni fgets(), ma non da getc(), quindi dovresti provvedere ad aggiungerlo prima della lettura di una nuova riga.

    Se devi stampare i caratteri, devi sapere quante righe hai letto, e tu non memorizzi il numero di righe.

    Adesso non ho voglia di compilare, ti propongo delle correzioni al tuo codice, ma non verifico compilando, Quindi ci potrebbero essere errori...



    codice:
    #define n_pat 53
    #define n_car 170
    using namespace std;
    
    int main()
    {
        FILE *fp;
        char c;
        char a[n_pat][n_car];
        int i=0,j=0,k=0;
        fp=fopen("c\\test\\pronto_soccorso.txt", "r");
        i=0;
        j=0;
        while((c = getc(fp)) != EOF){
            if (c==10) { 
                 
                  a[j][i]='\0';//Aggiungo il terminatore stringa
                  j++;
                  i=0;
            }
            else { 
                a[j][i]=c;
                i++;
            }
        }
        fclose(fp);
        for(int i = 0; i < j; i++) {// Ripeto per il numero di righe lette
            for(int k = 0;a[i][k]!='\0'; k++) {// Ripeto fino a terminatore stringa
                 cout << a[i][k] << " ";
            }
            cout << endl;
    }
    }
    Ultima modifica di torn24; 17-12-2016 a 09:02
    Tecnologia

Tag per questa discussione

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.