在我的作业中,我被要求将输出文本文件与diff进行比较。
当我使用运算符<
(差异脚本的最后一行)时,我的代码无法打开输入文件。
我应该如何在main中声明输入文件?
script.sh file
的最后一行是做什么的?
script.sh文件:
unzip A4-"$1".zip
(cd A4-"$1"/; make)
cp A4-"$1"/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);
/*...*/
}
答案 0 :(得分:0)
一种常见的命令模式是从作为参数提供的文件中读取,或者在缺少参数时从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
。 std::in
中的.\Schduler.out
(通常连接到终端)由打开的sample.in
句柄代替。
... | diff sample.out -
std::cout
中的 ...
被shell替换了std::cin
中的diff
。 -
是一个由diff
解释的参数,意味着它将使用从std::cin
获得的输入来比较一个文件,就像我在cppmain
中所做的一样我的例子。