Leyendo una línea a la vez en C

¿Qué método se puede usar para leer una línea a la vez desde un archivo en C?

Estoy usando la función fgets , pero no está funcionando. Está leyendo el token separado del espacio solamente.

¿Qué hacer?

Esto debería funcionar, cuando no puedes usar fgets() por alguna razón.

 int readline(FILE *f, char *buffer, size_t len) { char c; int i; memset(buffer, 0, len); for (i = 0; i < len; i++) { int c = fgetc(f); if (!feof(f)) { if (c == '\r') buffer[i] = 0; else if (c == '\n') { buffer[i] = 0; return i+1; } else buffer[i] = c; } else { //fprintf(stderr, "read_line(): recv returned %d\n", c); return -1; } } return -1; } 

Use el siguiente progtwig para obtener la línea por línea de un archivo.

 #include  int main ( void ) { char filename[] = "file.txt"; FILE *file = fopen ( filename, "r" ); if (file != NULL) { char line [1000]; while(fgets(line,sizeof line,file)!= NULL) /* read a line from a file */ { fprintf(stdout,"%s",line); //print the file contents on stdout. } fclose(file); } else { perror(filename); //print the error message on stderr. } return 0; } 

Si está codificando una plataforma que tiene la biblioteca GNU C disponible, puede usar getline ():

http://www.gnu.org/s/libc/manual/html_node/Line-Input.html

La función fgets leerá una sola línea de un archivo o num caracteres donde num es el segundo parámetro que se pasa a fgets . ¿Estás pasando un número lo suficientemente grande como para leer la línea?

Por ejemplo

 // Reads 500 characters or 1 line, whichever is shorter char c[500]; fgets(c, 500, pFile); 

Vs.

 // Reads at most 1 character char c; fgets(&c,1,pFile); 

Esto es más un comentario que una respuesta completa, pero no tengo suficientes puntos para comentar. 🙂

Aquí está el prototipo de función para fgets ():

 char *fgets(char *restrict s, int n, FILE *restrict stream); 

Leerá n-1 bytes o hasta una nueva línea o eof. Para más información ver aquí

fgets() debería ser el camino a seguir …

use cualquiera de los dos si sabe que sus líneas encajarán en el búfer o use fgetc para tener más control sobre la lectura

Usa fgets para leer desde la línea, y luego usa getc(...) para masticar la nueva línea o el final de la línea para continuar leyendo … aquí hay un ejemplo de leer siempre una línea …

 // Lee 500 caracteres o 1 línea, lo que sea más corto
 char c [500], chewup;
 while (true) {
     fgets (c, sizeof (c), pFile);
     if (! feof (pFile)) {
         chewup = getc (pFile);  // Para masticar el terminador de línea nueva
         // Hacer algo con C
     }más{
         descanso;  // Fin del archivo alcanzado ...
     }
 }

Fuente de error:

En realidad, no fue mi culpa … En este caso. Estaba usando la función strtok y accidentalmente modifiqué mi cadena original y original. Por lo tanto, mientras imprimía recibía el error …

Gracias a todos por ayudarme … 🙂

Puedes usar fscanf en lugar de fgets. Porque fgets fscanf para caracteres que incluyen espacios, pero al usar fscanf puede acceder por separado a los datos guardados en un archivo.eg, debe haber un archivo con la clase de nombre roll.now declare una línea de cadena y dos enteros.