2012-02-26 16 views
6

Voglio che il mio programma C chieda all'utente di digitare il nome del file che vogliono aprire e di stampare il contenuto di quel file sullo schermo. Sto lavorando dal tutorial C e ho il seguente codice finora. Ma quando lo eseguo, in realtà non mi permette di inserire il nome del file. (Prendo il 'tasto qualsiasi per continuare', sto usando i blocchi di codice)Apertura di un file da argomenti della riga di comando in C

Cosa sto facendo di sbagliato qui?

#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. Ecco come fare una domanda sui compiti. "Sono arrivato fino a qui e ho colpito un posto di blocco" piuttosto che "Scrivi questo programma per me". –

risposta

4

Se si desidera leggere l'input dell'utente da un prompt, si può usare la funzione scanf(). Per analizzare i parametri della riga di comando, è necessario digitare nella riga di comando, come in:

myprogram myfilename 

piuttosto che semplicemente digitando

myprogram 

e in attesa che venga richiesto. myfilename si troverà nell'array argv all'avvio del programma.

Quindi, iniziare rimuovendo il prompt printf("Enter the file name:"). Il nome file si trova in argv[ 1 ] se si è immesso come primo parametro dopo myprogram sulla riga di comando.

5

Questo leggerà da stdin il nome file. Forse vuoi farlo solo se il nome del file non viene fornito come parte della riga di 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

Si confondono gli argomenti della riga di comando con l'input dell'utente.

Quando si utilizzano gli argomenti della riga di comando, si esegue il programma e si passano gli argomenti allo stesso tempo. Per esempio:

ShowContents MyFile.txt 

Al contrario, quando si legge l'input dell'utente, per prima cosa eseguire il programma, quindi specificare il nome del file:

ShowContents 
Enter the file name: MyFile.Ttxt 

tuo programma legge già il primo argomento argv[1] e la tratta come il nome del file da aprire. Per avere il programma di leggere l'input dell'utente, fare qualcosa di simile:

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

Poi il nome del file sarà in str, invece di argv[1].

+0

Ah! Avevi ragione, stavo mescolandoli. Grazie per averlo chiarito! – TylarBen

Problemi correlati