如何在另一个C ++程序中运行C ++程序?

我有一个简单的C ++程序,它接受input和输出一些string。 喜欢这个:

$ ./game $ what kind of game? type r for regular, s for special. $ r $ choose a number from 1 - 10 $ 1 $ no try again $ 2 $ no try again $ 5 $ yes you WIN! 

现在我想写一个C ++程序可以运行这个C ++程序,并自动播放游戏,无需用户input,然后输出到文件或标准输出。

运行它看起来像这样:

 ./program game r > outputfile 

游戏是游戏程序,r玩正规风格。

我应该怎么做? 我需要这个程序的主要原因是我想做一个更大的程序自动testing。

你可以从<cstdlib>使用std::system

 std::system("game r > outputfile"); 

返回值是./program ,唯一的参数必须是char const *类型。

虽然没有标准的方法来运行一个程序,并为其提供标准输入。 通过你的命令行来判断,你正在使用一个Unix变体,其中<stdio.h>中的popen应该可以工作:

 FILE *sub = popen("game r > outputfile", "w"); 

然后用stdio函数写入sub ,然后读取输出文件。

(但对于简单的测试,我建议将程序的核心逻辑作为一组函数/类来实现,这些函数/类可以由循环中的自定义主函数运行;或者选择您最喜欢的脚本语言来处理这类事情。 )

给主要来源添加一个调用者函数并控制循环,记录和馈送输入,会更有效率。 这也不需要系统调用或其他魔法来拉动。 作为一名游戏程序员,我们尽可能地发挥自己的游戏来帮助调试,几乎总是通过内部代码完成,而不是通过外部脚本或系统调用。 它也使喂养可行的输入更容易。

这种情况下喊出一个“脚本”,恕我直言。

Bash,Perl,Python – 你的名字。

最简单的情况:

只需编写一个bash脚本来调用./program game r > outputfile

./program game r < test_input.txt > test_output.txt

对于更高级的场景,你可能想看看“ 期望 ”。

您可能还想看看“STAF”,这可能是“自动化测试自动化”的好方法:

http://staf.sourceforge.net/current/STAFFAQ.htm