PDA

Visualizza la versione completa : [C] Problema con acquisizione stringhe da file


wFree
12-01-2014, 16:46
Stavo provando ad acquisire dei dati da file in una stringa e poi portarli in una matrice ma non riesco. Arriva fino alla terza riga e poi si pianta. Dov' sbagliato l'algoritmo? Grazie :dh::dh:

file in questione:
.GATTO.....LINO
.A.O....A..A..A
.S.RITORNO.U...
...I....N..R...
...N...SOGNO...
POMODORO......


while(fgets(str,N,ff)!=NULL){
len=strlen(str);
if(str[len-1]=='\n'){
str[len-1]='\0';
len=len-1;}

for(i=0;i<N+2;i++)
matrix[righe+1][i]='.';

for(i=0;i<len;i++){
matrix[righe+1][i]=str[i];
}
righe++;}

Scara95
12-01-2014, 16:59
Stavo provando ad acquisire dei dati da file in una stringa e poi portarli in una matrice ma non riesco. Arriva fino alla terza riga e poi si pianta. Dov' sbagliato l'algoritmo? Grazie :dh::dh:

file in questione:
.GATTO.....LINO
.A.O....A..A..A
.S.RITORNO.U...
...I....N..R...
...N...SOGNO...
POMODORO......


while(fgets(str,N,ff)!=NULL){
len=strlen(str);
if(str[len-1]=='\n'){
str[len-1]='\0';
len=len-1;}

for(i=0;i<N+2;i++)
matrix[righe+1][i]='.';

for(i=0;i<len;i++){
matrix[righe+1][i]=str[i];
}
righe++;}

Potresti postare anche come hai inizializzato le variabili?
In ogni caso mi sembra che tu ti stia complicando eccessivamente la vita!

wFree
12-01-2014, 17:17
S, ecco!


#define N 50

FILE* ff;
int righe=0;
char matrix [righe+1][N+1];
char str[N+2]={0};
int i=0, len=0;

ff=fopen("cruciverba.txt", "r");

Scara95
12-01-2014, 17:39
S, ecco!


#define N 50

FILE* ff;
int righe=0;
char matrix [righe+1][N+1];
char str[N+2]={0};
int i=0, len=0;

ff=fopen("cruciverba.txt", "r");

char matrix [righe+1][N+1]; questa riga sbagliata!

In ogni caso pi semplice usare una memset e una strncpy
#include <stdio.h>
#include <string.h>

#define N 50

int main()
{
FILE *fp;
char buff[N];
char mat[N][N];
memset(mat, '.', N*N);
int righe;

fp = fopen("input.txt", "r");
if( fp != NULL ){
righe = 0;
while ( fgets(buff, N, fp) != NULL ){
if(buff[strlen(buff)-1] == '\n') buff[strlen(buff)-1] = '\0';
strncpy(mat[righe], buff, strlen(buff));
++righe;
}
fclose(fp);
}

return 0;
}

wFree
12-01-2014, 17:44
Ok, ho capito grazie!
Mi puoi solo spiegare perch la riga in questione sbagliata?

char matrix [righe+1][N+1];

Non si pu fare una cosa del genere? Perch la utilizzo praticamente sempre :D

Scara95
12-01-2014, 17:59
Da C99 in poi s, si pu fare, ma non questo il punto, il punto che stai riservando spazio per per una matrice [1][N+2] e poi sicuramente leggerai pi di 1 riga...
Puoi risolvere chiedendo il numero delle righe all'inizio, sovra-allocando il numero delle righe (se sei sicuro che queste basteranno sempre) oppure attraverso l'allocazione dinamica della memoria.

wFree
12-01-2014, 18:05
Chiaro, grazie mille! :)

Scara95
12-01-2014, 18:06
Non c' di che :ciauz:

Loading