使用 diff 脚本打开输入文件时出现问题(在 C++ 中)

problem with opening the input file with diff script (in c++)

在我的作业中,我被要求将输出文本文件与 diff 进行比较。

当我使用运算符 <(diff 脚本的最后一行)时,我的代码无法打开输入文件。

我应该如何在main中声明输入文件? script.sh file 中的最后一行是做什么的?

script.sh 文件:

unzip A4-"".zip
(cd A4-""/; make)
cp A4-""/Scheduler.out .
echo "##### DIFF #####"
./Scheduler.out < sample.in | diff sample.out -

int main (int argc , char* argv[]){
    fstream inputFile (argv[1],fstream::in);
    fstream outputFile ("outputFile.out",fstream::out);
    /*...*/
}

命令的一种常见模式是从作为参数提供的文件中读取,或者在缺少参数时从 std::cin 中读取。许多环境中命令的另一种常见做法是接受 - 作为要从 std::cin 读取的指示符。可以这样实现:

#include <iostream>
#include <fstream>
#include <vector>

int streamer(std::istream& is) {
    std::ofstream out("outputFile.out");
    if(out) {
        /*...*/
        return 0; // if all's well
    } else
        return 1; // open failed
}

int cppmain(const std::vector<std::string>& args) {         
    if(args.size() && args[0] != "-") { // or do something cleaver to read from all "args".
        std::ifstream is(args[0]);
        if(is)
            return streamer(is);   // read from a file
        else
            return 1;              // open failed
    } else {
        return streamer(std::cin); // read from stdin
    }
}

int main(int argc, char* argv[]) {
    return cppmain({argv + 1, argv + argc});
}

如果您与喜欢命名文件的人发生争执 -,请删除 && args[0] != "-" 部分。我把它放在那里只是为了显示选项。

最后一行:

./Scheduler.out < sample.in | diff sample.out -

细分:

./Scheduler.out < sample.in

shell打开sample.in读取并执行./Scheduler.out.\Schduler.out中的std::in,通常连接到一个终端,被打开的sample.in句柄所取代。

... | diff sample.out -

命令 ... 中的

std::coutdiff 中的 std::cin 替换为 shell。 - 是一个由 diff 解释的参数,意味着它将用从 std::cin 获得的输入来区分一个文件,就像我在 cppmain 中所做的一样我的例子。