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
的测试有可能永远不会成功。
您的程序需要文件名作为命令行参数,它不会从标准输入中读取。所以你必须把文件名作为参数,而不是使用输入重定向。该程序正在立即退出,因为 argc
是 1
。
program.exe file.txt
您应该添加一条错误消息,这样您就会知道问题所在:
if (argc < 2) {
printf("Usage: %s filename\n", argv[0]);
return 1;
}
我正在尝试编写一个简单的 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
的测试有可能永远不会成功。
您的程序需要文件名作为命令行参数,它不会从标准输入中读取。所以你必须把文件名作为参数,而不是使用输入重定向。该程序正在立即退出,因为 argc
是 1
。
program.exe file.txt
您应该添加一条错误消息,这样您就会知道问题所在:
if (argc < 2) {
printf("Usage: %s filename\n", argv[0]);
return 1;
}