【问题标题】:Send C++ input from terminal in one line在一行中从终端发送 C++ 输入
【发布时间】:2016-03-19 11:25:00
【问题描述】:

我有一个 C++ 算法,它接受一些用户输入,大致类似于

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

在 UNIX 外壳上。我想要做的是通过使用另一个发送几个system("./sum.out") 命令但我不知道如何使它也发送参数的c++ 文件来自动化这个过程,即ab 在我的例子中。换句话说,我希望第二个文件为其提供参数而不是用户。

【问题讨论】:

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

标签: c++ c unix iostream


【解决方案1】:

使用IO redirection:

$ ./sum.out < in.txt

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

$ cat in.txt
2
3

将程序a.out的标准输出重定向到sum.out的标准输入

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

【讨论】:

  • 我不能真正使用它,因为每次运行代码时我的 a 和 b 都会不同。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2022-11-26
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2018-05-30
    • 2013-12-17
    • 2012-01-30
    • 1970-01-01
    相关资源
    最近更新 更多