2012-02-26 17 views
6

Chcę, aby mój program C poprosił użytkownika o wpisanie nazwy pliku, który chce otworzyć i wydrukowanie zawartości tego pliku na ekranie. Pracuję z samouczka C i mam do tej pory poniższy kod. Ale kiedy go uruchomię, to faktycznie nie pozwala mi wprowadzić nazwy pliku. (Otrzymuję "naciśnij dowolny przycisk, aby kontynuować", używam bloków kodu)Otwieranie pliku z argumentów wiersza poleceń w C

Co ja tu robię źle?

#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. Oto jak zadać pytanie o pracę domową. "Zaszedłem tak daleko i trafiłem na blokadę drogi", a nie "Napisz ten program dla mnie". –

Odpowiedz

4

Jeśli chcesz odczytać dane wprowadzone przez użytkownika w wierszu, należy użyć funkcji scanf(). Do analizowania parametrów wiersza poleceń, należy wpisać je w wierszu polecenia, na przykład:

myprogram myfilename 

zamiast po prostu wpisując

myprogram 

i spodziewając się monit. myfilename będzie znajdować się w tablicy argv po uruchomieniu programu.

Zacznij od usunięcia monitu printf("Enter the file name:"). Nazwa pliku byłaby w argv[ 1 ] przy założeniu, że wpisałeś ją jako pierwszy parametr po myprogram w linii poleceń.

5

Spowoduje to odczytanie ze stdin nazwy pliku. Być może chcesz to zrobić tylko wtedy, gdy nazwa pliku nie została podana jako część linii poleceń.

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

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

Miksujesz argumenty linii poleceń z danymi wprowadzonymi przez użytkownika.

Gdy używasz argumentów wiersza poleceń, uruchamiasz program i przekazujesz argumenty w tym samym czasie. Na przykład:

ShowContents MyFile.txt 

Natomiast podczas odczytu danych wprowadzonych przez użytkownika, należy najpierw uruchomić program, a następnie podać nazwę pliku:

ShowContents 
Enter the file name: MyFile.Ttxt 

Program już czyta pierwszy argument argv[1] i traktuje ją jako nazwa pliku do otwarcia.

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

Wtedy nazwa pliku będzie w str zamiast argv[1]: mieć programu odczytać danych wprowadzonych przez użytkownika, coś jak to zrobić.

+0

Ah! Miałeś rację, miksowałem je. Pozdrawiam za oczyszczenie! – TylarBen

Powiązane problemy