C ++,如何从命令行提供输入文件名,而无需在程序中对其进行硬编码?

时间:2014-02-14 21:29:40

标签: c++ filenames

这是我上一个问题的延续, In C++, how to read the contents of a text file, and put it in another text file?

在那里,我能够打开输入文件input.txt并成功读取内容, 但现在我不想事先硬编码或提供输入文件名,

ifstream myfile ("input.txt");
if (myfile.is_open())

但我希望稍后在编译程序并在命令行中生成名为test的可执行文件后给出输入文件名,如下所示

./test input.txt

有关如何执行此操作的任何建议吗?

4 个答案:

答案 0 :(得分:3)

您可以在main函数中访问传递给您的程序的命令行参数:

int main(int argc, char *argv[]) { }

argc是传递给程序的参数数量,argv包含指向传递给程序的参数的C字符串的指针。因此,使用此数组可以访问传递给程序的参数。

但你必须注意:程序本身总是作为第一个参数传递给程序。所以argc总是至少有一个,argv[0]包含程序名。

如果您想从帖子中访问input.txt,可以写下:

int main(int argc, char *argv[]) {
   if (argc > 1) {
      // This will print the first argument passed to your program
      std::cout << argv[1] << std::endl;
   }
}

答案 1 :(得分:3)

只需添加所有答案 - 您可以使用C 标准输入和输出',例如 printf()&amp; scanf()的

$ ./a.out < input.file // input file
$ ./a.out > output.file // output file
$ ./a.out < input.file > output.file // merging above two commands.

了解更多信息:REFER THIS

当然,干净的方式是使用 argc / argv 作为其他绅士的回答。

答案 2 :(得分:0)

这是argvargc的用途。

int main(int argc, char **argv)
{
    assert(argc >= 2); // Not the best way to check for usage errors!
    ifstream myfile(argv[1]);
    …
}

答案 3 :(得分:0)

main的argc和argv参数将包含程序的所有输入参数,argc / argv的google,或者查看answers here