从C中的多个文件中读取字符

时间:2015-05-04 20:48:41

标签: c file file-io stdin

我正在尝试读取不同文件中的所有字符。例如,通过调用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")

有人可以帮我修改我的代码吗?我究竟做错了什么?有更好的方法吗?

非常感谢您的帮助!

1 个答案:

答案 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);
    }
}