我如何使我完成的程序读取文件,通过终端输入

How can I make my finished program read a file, via terminal input?

本文关键字:文件 输入 终端 读取 程序 何使我      更新时间:2023-10-16

这是愚蠢的,但我已经完成了一个程序,在一个文件中使用…但问题是我不知道怎么在终端里指向它?我用的是macbook pro,现在要运行我的c++程序,我输入

"g++ fill .cpp -o 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;
        }
    }

"

 $ 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

输入./mainstd::cin输入流。

或者

$ ./main < myinputfile.txt

或这里记录的许多其他选项之一。

但后者取决于您的用例。如果您需要处理来自已知单独文件的输入,您最好使用argv将名称作为程序参数传递。

./main可执行文件知道使用哪个CPP文件,因为程序中的这一行

Text t2(argv[1]);

所以当你输入

$ ./main input.txt

这一行使用命令行'input.txt'中的参数1来构造一个新的Text对象。

结构由这一行负责:

  Text(const string& fname)

这里你传递一个字符串名称给Text类,然后使用该文件名打开文件句柄