我想以两种方式运行代码并发送文件
myprogram < input.txt
或cat input.txt | myprogram
myprogram input.txt
我已经找到了使用argc
和argv[]
的第二种方式,但是我无法弄清楚如何为第一个选项编写代码。
int main (int argc, char *argv[])
{
ifstream fin;
if(argc > 1){
fin.open (argv[1]);
}
else
}
答案 0 :(得分:5)
如上面的注释中所述,一种可移植的方式是将打开文件或 var myJson = read[Order](cutJson)
作为对函数的std::cin
引用,然后在其中进行输入。在这种情况下,可以传递文件或istream
。例如
std::cin
如果没有给出文件,则从#include <iostream>
#include <fstream>
#include <string>
void readinfo (std::istream& in)
{
std::string s;
while (in >> s)
std::cout << s << '\n';
}
int main (int argc, char **argv) {
if (argc > 1) { /* read from file if given as argument */
std::ifstream fin (argv[1]);
if (fin.is_open())
readinfo (fin);
else {
std::cerr << "error: file open failed.\n";
return 1;
}
}
else { /* read from stdin */
readinfo (std::cin);
}
return 0;
}
读取的非Linux唯一选项仅需要 ternary 运算符,例如
/dev/stdin
都不是完美的,但是两者都支持(受操作系统限制)
std::ifstream fin (argc > 1 ? argv[1] : "/dev/stdin");
if (!fin.is_open()) {
std::cerr << "error: file open failed.\n";
return 1;
}
/* read from fin here */
或
myprogram < input.txt
答案 1 :(得分:-2)
您想阅读stdin的内容,为此有2个选项:
std::cin
fread()
和其他C风格的IO std::cin >>
https://en.cppreference.com/w/cpp/io/cin的优点是将格式化的文本读取为某种二进制表示形式https://en.cppreference.com/w/cpp/io/basic_istream/operator_gtgt
C风格的IO https://en.cppreference.com/w/cpp/io/c具有很好地读取二进制数据的优点。
这取决于您要如何处理您的输入