Quiero que mi programa en C que pida al usuario que escriba el nombre del archivo que desea abrir e imprimir el contenido de ese archivo en la pantalla. Estoy trabajando desde el tutorial de C y tiene el siguiente código hasta el momento. Pero cuando voy a ejecutarlo, en realidad no me permite ingresar el nombre del archivo. (Tengo la ‘presione cualquier botón para continuar’, yo estoy usando el codeblocks)

¿Qué estoy haciendo mal aquí?

#include <stdio.h>

int main ( int argc, char *argv[] )
{
    printf("Enter the file name: \n");
    //scanf
    if ( argc != 2 ) /* argc should be 2 for correct execution */
    {
        /* We print argv[0] assuming it is the program name */
        printf( "usage: %s filename", argv[0] );
    }
    else
    {
        //We assume argv[1] is a filename to open
        FILE *file = fopen( argv[1], "r" );

        /* fopen returns 0, the NULL pointer, on failure */
        if ( file == 0 )
        {
            printf( "Could not open file\n" );
        }
        else
        {
            int x;
            /* Read one character at a time from file, stopping at EOF, which
               indicates the end of the file. Note that the idiom of "assign
               to a variable, check the value" used below works because
               the assignment statement evaluates to the value assigned. */
            while  ( ( x = fgetc( file ) ) != EOF )
            {
                printf( "%c", x );
            }
            fclose( file );
        }
    }
    return 0;
}
+1. Esta es la manera de hacer una pregunta acerca de la tarea. «He llegado hasta aquí y han alcanzado un obstáculo» en lugar de «Escribir este programa para mí».

OriginalEl autor TylarBen | 2012-02-26

4 Comentarios

  1. 4

    Si quieres leer la entrada del usuario desde un símbolo del sistema, utilice las scanf() función. Para analizar los parámetros de línea de comandos, escriba en la línea de comando, como en:

    myprogram myfilename

    lugar de simplemente escribir

    myprogram

    y esperando a que se le pida. myfilename sería en el argv de la matriz cuando el programa se inicia.

    Por lo tanto, empezar por la eliminación de la printf( "Enter the file name:" ) de símbolo del sistema. El nombre de archivo sería en argv[ 1 ] suponiendo que entró como primer parámetro después de myprogram en la línea de comandos.

    OriginalEl autor Bob Kaufman

  2. 5

    Esto se lee de la entrada estándar el nombre del archivo. Tal vez usted sólo quiere hacer esto si el nombre de archivo no es incluido como parte de la línea de comandos.

    int main ( int argc, char *argv[] ) 
    { 
        char filename[100];
        printf("Enter the file name: \n"); 
        scanf("%s", filename);
    
        ...
        FILE *file = fopen( filename, "r" );  

    OriginalEl autor Ed Heal

  3. 4

    Que son la mezcla de argumentos de línea de comando con la entrada del usuario.

    Al uso de argumentos de línea de comandos, ejecute el programa y pasar los argumentos al mismo tiempo. Por ejemplo:

    ShowContents MyFile.txt

    Por el contrario, al leer la entrada del usuario, en primer lugar ejecutar el programa, a continuación, proporcione el nombre del archivo:

    ShowContents
    Enter the file name: MyFile.Ttxt

    Su programa ya lee el primer argumento argv[1] y la trata como el nombre del archivo a abrir. El programa para leer la entrada del usuario, hacer algo como esto:

    char str[50] = {0};
    scanf("Enter file name:%s", str); 

    A continuación, el nombre de archivo será en str, en lugar de argv[1].

    Ah! Usted tenía razón, yo era la mezcla de ellos. Saludos para aclarar!

    OriginalEl autor Diego

Dejar respuesta

Please enter your comment!
Please enter your name here