Newsgroup: it.comp.lang.c
Titolo: problema con file da aprire

io ho un file,l'ho chiamato matrcat.txt di testo.
Esso contiene:
dfrgggggga
dreeeeeeer
sdfefrgeeee
sdafsdfsger
e così via
devono esserci lo stesso numero di colonne per ogni riga,io devo aprire il
file e contare il numero di righe e di colonne che ci sono.Questo è il mio
codice:
#include <stdio.h>
#define MAX_RIG 24
#define MAX_COL 70
#define MAX_FILE 20
void main()
{
FILE *source;
char nomefile[MAX_FILE+1];
int lettera;
int numcol=0;
int numrig=0;
printf("Inserire il nome del file da aprire\n");
scanf("%s",nomefile);
if ((source=fopen(nomefile,"r"))==NULL)
printf("error: could not open file\n");
else
while ((numrig<MAX_RIG)&&((lettera=getc(source))!=EOF))
{
while
((((lettera=getc(source))!='\n')&&(numcol<MAX_COL))&&((lettera=fgetc(source)
)!=EOF))
numcol++;
numrig++;
}
numcol=numcol/numrig;
printf("%d,%d",numcol,numrig);
fclose(source);
}
il fatto è che quando va a leggere lettera per lettera il file con
getc,salta fuori un linfeed a metà riga!!!
Facendo lo step over con BC mi viene un lettera=10(decimale del linefeed)
dopo un 4-5 caratteri...
Non so che cosa può essere??

 codice:
[...]
Scusa se non metto mano sul tuo codice...perň era un tantino spacca
cervello.
Io userei invece che tutti quei cicli con getc, fgets che ti permette di
leggere una riga per volta.
while(fgets(buffer,LENGTH, source) != NULL)
    numrig++;
numcol = strlen(buffer);
Attento solo che la costante LENGTH sia sufficientemente grande.
P.S
Mi pare che tu davi per scontato che il file conteneva per ogni riga lo
stesso numero di colonne, per cui non ho messo controlli per verificarlo.
Ciao.

 Scusa se non metto mano sul tuo codice...però era un tantino spacca



I'm not prejudiced, I hate everyone equally.

 line-feed,a cosa è dovuto??
Il codice che ci hai presentato non funziona assolutamente.
Il fatto che ci siano strani comportamenti credo derivi da questa
riga di codice simile alla tua (un pò semplificata)
    while((lettera = getc(source)) != '\n') && (lettera=fgetc(source)) !=
EOF)
    ....
dove per ogni ciclo interno leggi 2 caratteri dal file, questo provoca una
serie di errori.
credo che avresti dovuto fare
while((lettera = getch(source)) != '\n' && lettera != EOF)
...
Sicuramente ci sono altri errori sull'algortmo per ricavare il numero di
colonne e righe. Ecco una risistemata abbastanza radicale del algoritmo da
te presentato :
int n = 0;
...
 while(1)
 {
  while((lettera = getc(source)) != '\n' && lettera != EOF)
   n++;
  if(lettera == EOF)
   break;
  numrig++;
 }
 numcol = n / numrig;
ciao

ho capito,ecco perchè finisce prima il file...leggo tre volte un
carattere,cioè un giro legge tre caratteri cacchio che errore...
scusate tutti ma sono uno stupido... :-)
"Antonio barbone" <bar...@raffaello.home> wrote in message
news:slrn9kh5m2...@barbone.raffaello.home...


 parametro. Poi su tale stringa mette il catattere '\0' alla fine.
Ho scritto alcune cavolate :
1) FILE* non si può definire il tipo del descrittore, ma un puntatore ad una
struttura di controllo dei file per stream( che all'interno ovviamente
presenterà un campo per il descrittore...ma questo non c'entra).
2) fgets si ferma non dopo n caratteri letti ma dopo n - 1 caratteri letti.
Ciao.

 scusate tutti ma sono uno stupido... :-)
ci siamo passati tutti per errori simili .... o no ????
ciao ;-)))
