这很傻但我已经完成了一个程序,它接受一个文件使用..但问题是我不知道如何在终端中指向它?我在macbook pro上,现在运行我输入的C ++程序
“g ++ FillMe.cpp -o main; ./main”
但是现在如何让我的FillMe程序实际读取文件?如何在终端命令中指向它?感谢。
有效的代码如下:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
class Text {
string text;
public:
Text() {}
Text(const string& fname) {
ifstream ifs(fname.c_str());
string line;
while (getline(ifs, line))
text += line + '\n';
}
string contents() {
return text;
}
};
int main(int argc, char* argv[]) {
if (argc > 1)
{
Text t1;
Text t2(argv[1]);
cout << "t1 :\n" << t1.contents() << endl;
cout << "t2 :\n" << t2.contents() << endl;
}
}
“
答案 0 :(得分:0)
$ g++ FillMe.cpp -o main
$ ./main
如何在终端命令中指向它?
您可以选择几个选项。
对于您的实际设置,您希望从程序命令行参数中查看文件名。因此,对于多个文件参数,您需要在循环中访问它们
if (argc > 1) {
for(int i = 1; i < argc; ++i) {
Text txt(argv[i]);
cout << "txt:\n" << txt.contents() << endl;
}
并从命令行调用
$ ./main file1.txt file2.txt file3.txt
恕我直言更好,更灵活的解决方案是默认情况下让您的程序从标准输入读取。因此,您可以简单地使用shell的输入重定向功能,例如管道
$ cat file1.txt file2.txt file2.txt | ./main
提供./main
的{{1}}输入流。
或者
std::cin
或其中一个选项documented here。
但后者取决于您的使用案例。如果您需要处理来自已知单独文件的输入,最好使用$ ./main < myinputfile.txt
将名称作为程序参数传递。
答案 1 :(得分:-1)
./main可执行文件知道由于程序中的这一行而使用哪个cpp文件
Text t2(argv[1]);
所以当你输入
$ ./main input.txt
此行使用命令行'input.txt'
中的参数1来构造新的Text对象。
这条线路正在施工:
Text(const string& fname)
在这里,您将字符串名称传递给Text类,然后使用该文件名打开文件句柄