从终端发送一行C++输入

Send C++ input from terminal in one line

提问人:EagerHEP 提问时间:12/14/2015 更新时间:12/14/2015 访问量:203

问:

我有一个C++算法,它接受一些用户输入,所以大致如下

./sum.out
Enter a: 2
Enter b: 3
Sum is 5

在 UNIX shell 上。我想做的是使用另一个发送多个命令的 c++ 文件来自动化该过程,但我不知道如何让它也发送参数,即 就我而言。换句话说,我希望第二个文件为它提供参数,而不是用户。system("./sum.out")ab

C++ C UNIX IOstream

评论

0赞 kaylum 12/14/2015
请选择 C 或 C++ 作为标签。不是两者兼而有之。最合适的答案可能会有所不同,具体取决于您选择的答案。它必须通过 ?system
0赞 EagerHEP 12/14/2015
不,它没有,这只是我所知道的唯一方法
3赞 kaylum 12/14/2015
有一些更优雅但也更复杂的方法可以使用 、 和 来做到这一点。如果你想要一些简单的东西可以做.请注意,里面的字符串可以动态生成。通过使用类似的东西将格式化的字符串存储到缓冲区中,然后将该缓冲区传递给 。或者更好的(恕我直言)是放弃 C/C++ 测试程序方法并编写一个 shell 脚本来测试您的程序。pipeforkexecdupsystem("echo 2 3 | ./sum.out");systemsnprintfsystem
0赞 EagerHEP 12/14/2015
snprintf成功了,谢谢!

答:

0赞 Ayush 12/14/2015 #1

使用 IO 重定向

$ ./sum.out < in.txt

其中 是包含输入的文本文件:in.txt

$ cat in.txt
2
3

将 stdout 从程序重定向到 stdin 的a.outsum.out

`$ ./input.out | ./sum.out`

评论

0赞 EagerHEP 12/14/2015
我真的不能使用它,因为每次运行代码时我的 a 和 b 都会不同。
0赞 EagerHEP 12/14/2015 #2

我最终使用了一个格式化的字符串:

char buffer[100];
snprintf(buffer,100,"echo %d %d | ./sum.out",2,3);
system(buffer);