C:使用 fgetc 从文件中打印单词

C: Printing words from a file using fgetc

我正在尝试编写一个简单的 main 函数,它通过命令行接收一个文件,并打印文件中的所有单词。

但是,我遵循了几个似乎不起作用的教程。这是我的代码:

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"); 直接打开它而不是将文件名作为参数传递,但没有任何显示。

我不知道出了什么问题。

fgetc()returnsint,不是char。您需要申报

int c;

否则,EOF的测试有可能永远不会成功。

您的程序需要文件名作为命令行参数,它不会从标准输入中读取。所以你必须把文件名作为参数,而不是使用输入重定向。该程序正在立即退出,因为 argc1

program.exe file.txt

您应该添加一条错误消息,这样您就会知道问题所在:

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