es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo usar “fgets” después de usar “fgetc”?

Estoy tratando de escribir un programa específico que lee datos de un archivo, pero me di cuenta de que cuando leo el archivo con fgetc, si uso fgets más tarde, no tiene ninguna salida.

Por ejemplo, este código:

#include <stdio.h>
#include <stdlib.h>

int main() {
FILE * arq = fopen(“arquivo.txt”, “r”);
char enter = fgetc(arq);
int line_count = 1;

while(enter != EOF) {
    if (enter == '\n') line_count++;
    enter = fgetc(arq);
}

printf("%d", line_count);
char str[128];

while(fgets(str, 128, arq)) printf("%s", str);

}

el segundo while no imprime nada, pero si elimino el primer while, el código imprime el contenido del archivo, ¿por qué sucede eso?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Esto está sucediendo porque fgetc lee el archivo carácter por carácter y mueve el puntero del archivo al siguiente carácter cada vez que se llama. Cuando se llega al final del archivo, el puntero del archivo está al final del archivo y fgets no podrá leer nada. Para solucionarlo, necesitas restablecer el puntero del archivo al inicio del archivo usando fseek antes de llamar a fgets:

    #include <stdio.h>
    #include <stdlib.h>
    
    int main() {
        FILE * arq = fopen("arquivo.txt", "r");
        char enter = fgetc(arq);
        int line_count = 1;
    
        while(enter != EOF) {
            if (enter == '\n') line_count++;
            enter = fgetc(arq);
        }
    
        printf("%d", line_count);
        char str[128];
    
        fseek(arq, 0, SEEK_SET); // Restablece el puntero del archivo al inicio del archivo
        while(fgets(str, 128, arq)) printf("%s", str);
    }
    

Comments are closed.