我正在尝试读取不同文件中的所有字符。例如,通过调用 myprogram < file1 file2
.
我的方法如下:
void do_read(FILE * file){
char ch;
while (ch != EOF) {
ch = getc(file);
printf("%c\n", ch);
}
int main(int argc, char * argv[])
{
int i = 1;
FILE * fp = NULL;
if (argc < 1) {
//Error. No file given
printf("Error");
}
else {
// cycle through all files in command line arguments and read them
for (i=1; i < argc; i++) {
if ((fp = fopen(argv[i], "r")) == NULL) {
printf("Failed to open file.\n");
}
else {
do_read(fp);
fclose(fp);
}
}
}
return 0;
}
但是每当我尝试运行它时,即使是 myprogram < file1
(只有 1 个参数)它不输出任何内容。甚至连printf("Error")
都没有.
有人可以帮我修复我的代码吗?我究竟做错了什么?有更好的方法吗?
非常感谢您提前提供的帮助!
最佳答案
myprogram < file1
本质上是 cat file1 | myprogram
的简写,也就是说,您的程序需要读取 stdin 来获取该文件的内容。您想要的调用是 myprogram file1 file2
.
此外,您的 do_read 函数已损坏,因为它甚至会在字符为 EOF
时打印该字符。 。不要在获取之前检查,而是在获取时检查:
void do_read(FILE * file){
char ch = '\0';
while (ch != EOF) {
ch = getc(file);
printf("%c\n", ch);
}
}
/* Becomes: */
void do_read(FILE * file){
char ch = '\0';
while ((ch = getc(file)) != EOF) {
printf("%c\n", ch);
}
}
关于c - 从C中的多个文件中读取字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30039680/