我正在尝试读取不同文件中的所有字符。例如,通过调用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")
。
有人可以帮我修改我的代码吗?我究竟做错了什么?有更好的方法吗?
非常感谢您的帮助!
答案 0 :(得分:2)
myprogram < file1
本质上是cat file1 | myprogram
的简写,也就是说,你的程序想要读取stdin来获取该文件的内容。您想要的调用是myprogram file1 file2
。
此外,您的do_read函数已损坏,因为它 EOF
时甚至会打印char。而不是在收到之前检查,检查何时:
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);
}
}