使用 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::cout
将 diff
中的 std::cin
替换为 shell。 -
是一个由 diff
解释的参数,意味着它将用从 std::cin
获得的输入来区分一个文件,就像我在 cppmain
中所做的一样我的例子。
在我的作业中,我被要求将输出文本文件与 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::cout
将 diff
中的 std::cin
替换为 shell。 -
是一个由 diff
解释的参数,意味着它将用从 std::cin
获得的输入来区分一个文件,就像我在 cppmain
中所做的一样我的例子。