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 imprimir números de línea de varios archivos sin usar fgets

Estoy tratando de imprimir números de línea al principio de las líneas sin usar fgets().
Sí, imprime bien el número de línea cuando ingreso varios archivos, pero quiero obtener un resultado como este. ¿Pueden ayudarme con esto?

Resultado actual

1 I'll always remember
2 the day we kiss my lips
3
4 light as a feather
*5 ####@localhost ~ $*

Resultado esperado

1 I'll always remember
2 the day we kiss my lips
3
4 light as a feather
*####@localhost ~$*

Aquí está mi código:

#include <stdio.h>

int main(int argc, char *argv[]) {
    FILE *fp;
    int c, n;
    n = 1;
    for (int i = 1; i < argc; i++) {
        if (argc < 2) 
            fp = stdin; 
        else
            fp = fopen(argv[i], "r"); 
        c = getc(fp); 
        printf("%d ", n);
        while (c != EOF) { 
            putc(c, stdout); 
            if (c == '\n')
                n++, printf("%d ", n);
            c = getc(fp);
        }
        fclose(fp);
    }
    return 0;
}

</stdio.h>

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para lograr el resultado esperado, debes modificar tu código de la siguiente manera:

    #include <stdio.h>
    
    int main(int argc, char *argv[]) {
        FILE *fp;
        int c, n;
        n = 1;
        for (int i = 1; i < argc; i++) {
            if (argc < 2) 
                fp = stdin; 
            else
                fp = fopen(argv[i], "r"); 
            printf("%2d ", n); // cambiar esto para imprimir el número de línea con dos dígitos
            while ((c = fgetc(fp)) != EOF) { // usar fgetc en lugar de getc
                putchar(c);
                if (c == '\n') {
                    n++;
                    printf("%*s", 3, ""); // imprimir 3 espacios después del número de línea
                    // esto alinea la siguiente línea con la salida debajo del número de línea
                    // ajusta el valor de 3 según sea necesario para alinear la salida
                }
            }
            fclose(fp);
        }
        return 0;
    }
    

    Los cambios realizados son:

    • Utilizar fgetc en lugar de getc, ya que fgetc es más robusto contra errores y se puede utilizar con flujos distintos a stdin.
    • Imprimir el número de línea con dos dígitos utilizando %2d en lugar de %d.
    • Imprimir tres espacios después del número de línea para alinear la siguiente línea con la salida debajo del número de línea. La cantidad de espacios necesarios puede variar dependiendo de la salida.</stdio.h>

Comments are closed.