PDA

Visualizza la versione completa : Lettura,acquisizione e salvataggio delle righe(contenenti frasi) di un file di testo in una matrice


Antho
16-12-2016, 19:11
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:



#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;
}
}

torn24
17-12-2016, 08:00
Il codice sorgente deve essere racchiuso nel tag code :old:

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...






#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;
}
}

Loading