将文件作为命令行c++的输入

Take file as an input from the command line c++

目前我有代码使用 cin 获取文件名,在程序执行时用作输入。我想要它,这样当我 运行 程序时,我可以添加文件重定向和文件名,并且 运行 这样:./a.out < file.txt。我如何使用重定向将我的文件输入到我的代码中。

这是我目前如何接受输入的示例:

int main(){
  
    std::string filename;
 std::cin >> filename;
 std::ifstream f(filename.c_str());
  
 }

这样做

#include <iostream>
#include <fstream>
#include <string>

int main()
{
    std::string line;

    std::cout << "received " << std::endl;

    while(std::getline(std::cin, line))
    {
        std::cout << line  << std::endl;
    }

    std::cout << "on stdin" << std::endl;
}

由于在命令行上使用 <,文件内容已在 stdin 上传递给您,因此您无需自己打开文件。

此代码有一个缺点,如果您不在 stdin 上输入任何内容,它就会冻结。检测 stdin 为空只能以不可移植的方式实现(参见 here)。

最好接受您的文件名作为普通命令行参数并在您的程序中打开它。