2012-02-26 8 views
6

Quiero que mi programa C solicite al usuario que escriba el nombre del archivo que desea abrir e imprima el contenido de ese archivo en la pantalla. Estoy trabajando desde el tutorial de C y tengo el siguiente código hasta ahora. Pero cuando lo ejecuto, en realidad no me permite ingresar el nombre del archivo. (Tengo el 'presione cualquier botón para continuar', estoy usando bloques de código)Abrir un archivo desde argumentos de línea de comando en C

¿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; 
} 
+4

+1. Así es como hacer una pregunta sobre la tarea. "He llegado hasta aquí y he llegado a un obstáculo" en lugar de "Escribir este programa para mí". –

Respuesta

4

Si desea leer la entrada del usuario desde un indicador, se utiliza la función scanf(). Para analizar los parámetros de línea de comandos, debe escribir ellos en la línea de comandos, como en:

myprogram myfilename 

en lugar de simplemente escribiendo

myprogram 

y esperando que se le pregunte. myfilename estaría en la matriz argv cuando se inicia el programa.

Por lo tanto, comience eliminando el printf("Enter the file name:") prompt. El nombre del archivo estaría en argv[ 1 ] asumiendo que lo ingresó como el primer parámetro después de myprogram en su línea de comando.

5

Esto leerá de stdin el nombre de archivo. Quizás solo desee hacer esto si el nombre de archivo no se proporciona como parte de la línea de comando.

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

    ... 
    FILE *file = fopen(filename, "r"); 
4

Está mezclando los argumentos de línea de comandos con la entrada del usuario.

Cuando utiliza argumentos de línea de comandos, ejecuta el programa y pasa los argumentos al mismo tiempo. Por ejemplo:

ShowContents MyFile.txt 

Por el contrario, cuando se lee la entrada del usuario, primero se ejecuta el programa, a continuación, proporcionar el nombre del archivo:

ShowContents 
Enter the file name: MyFile.Ttxt 

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

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

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

+0

¡Ah! Tenías razón, los estaba mezclando. ¡Saludos por aclarar eso! – TylarBen

Cuestiones relacionadas