2012-02-24 14 views
10

estoy leyendo desde un archivo de formatoal leer el archivo utilizando fgets

1 32 43 23 
32 43 
123 43 54 243 
123 2222 
2 

aquí está mi fragmento de código.

string[100]; 
while(!feof(fp)) 
fgets(string,100,fp) 

ahora cuando pongo cada cuerda, en la última cuerda estoy obteniendo repetición. y algunas ambigüedades más (al igual que otra cosa también se imprime digamos 123 o más).

¿Cómo solucionar este problema?

+0

¿Hay un '\ n 'carácter de final de línea al final de la última línea en el archivo? – dasblinkenlight

+2

Publique su código real completo, esto ni siquiera debería compilarse. – Staven

Respuesta

17

Debe comprobar el valor de retorno de fgets. Si una lectura ha sido exitosa, fgets devuelve el puntero al buffer que le pasó (es decir, string en su ejemplo). Si se encuentra el final de archivo y no se han leído los caracteres, fgets devuelve NULL.

Prueba esto:

char string[100]; 
while(fgets(string, 100, fp)) { 
    printf("%s\n", string); 
} 
+0

¿Por qué probarías con feof si fgets lo hace? –

+2

@ManuelReis Tienes razón, la prueba de 'falta' es innecesaria (editada). – dasblinkenlight

+1

Gracias por la respuesta, estaba teniendo una crisis existencial por un segundo. –

5

El eof solo se ha alcanzado después de ha intentado leer desde un archivo que está al final. Usted tiene que utilizar el valor de retorno de fgets lugar (que devuelve NULL EOF o si el error y el puntero se da lo contrario):

char string[100]; 
while(fgets(string, 100, fp)) 
    // do stuff with string 

Comprobación del valor de retorno como esto hará que nunca para golpear la EF dentro del cuerpo del bucle, como el otro, en lugar de en la condición.

Cuestiones relacionadas