如何从stdin而不是命令行读取?

时间:2017-11-25 07:40:27

标签: file-io command-line-arguments stdin

    FILE * file;
    file = fopen(argv[2] , "r");

    float val;

    if (file) {
        while (fscanf(file, "%s", str)!=EOF){
            val = atof(str);
            root = insert(root, val);
        }
            fclose(file);
        }else{
         exit(1);
        }

这是我现在的代码的一部分。我试图改变它,以便它将从stdin而不是从命令行读取。例如,运行程序将是" ./ a.out x< file.txt的"而不是" ./ a.out x file.txt"。

1 个答案:

答案 0 :(得分:0)

不使用fopen()打开文件,而是使用fdopen()调用来获取位于文件描述符顶部的FILE *以用于标准输入。那是文件描述符0,或者你可以使用STDIN_FILENO标题中的文字unistd.h,如果你想让你的程序更容易阅读。它看起来像这样:

file = fdopen(STDIN_FILENO, "r");

你的程序的其余部分保持不变。