C: печать слов из файла с помощью fgetc - PullRequest
0 голосов
/ 10 октября 2019

Я пытаюсь написать простую основную функцию, которая принимает файл через командную строку и печатает все слова в файле.

Однако я следовал нескольким учебникам, которые просто неКажется, не работает. Вот мой код:

int main(int argc, char *argv[]) {

    if (argc < 2) return 1;
    char * filename = argv[1];
    FILE* file = fopen(filename, "r");

    if(file == NULL) {
      perror("Error opening file");
      return(1);
   }

   char c;
   while((c = fgetc(file)) != EOF)
    {
        if(c == ' ' || c == '\n')
        {
            printf("\n");
        }
        else
        {
            printf("%c", c);
        }
    }
    printf("Done.");
    fclose(file);
    return 0;
}

Пока он ничего не возвратил и не показывает ошибку. Командная строка выглядит следующим образом:

C:\Users\<USERNAME>\Desktop\C_C++>program.exe < file.txt

C:\Users\<USERNAME>\Desktop\C_C++>program.exe > file.txt

C:\Users\<USERNAME>\Desktop\C_C++>

Она использует командную строку Windows. Я не знал, нужно ли было использовать > или < при передаче параметра файла, но я также использовал имя файла вместо filename в FILE* file = fopen(filename, "r");, чтобы просто открыть егонепосредственно вместо передачи имени файла в качестве параметра, но ничего не показывает.

Понятия не имею, что происходит не так.

1 Ответ

4 голосов
/ 10 октября 2019

fgetc() возвращает int, а не char. Вам нужно объявить

int c;

В противном случае есть вероятность, что тест для EOF никогда не будет успешным.

Ваша программа ожидает имя файла в качестве аргумента командной строки, это не такчитать со стандартного ввода. Поэтому вы должны указать имя файла в качестве аргумента, а не использовать перенаправление ввода. Программа немедленно завершает работу, потому что argc - это 1.

program.exe file.txt

Вы должны добавить сообщение об ошибке, чтобы вы знали, что это проблема:

if (argc < 2) {
    printf("Usage: %s filename\n", argv[0]);
    return 1;
}
...