我有一个简单的程序,例如在C ++中
#include<iostream>
using namespace std;
int main()
{
int a, b, c;
cin >> a >> b;
c = a + b;
cout << c;
}
在此,我需要在执行时将a
和b
作为输入。
我需要编写一个脚本来自动输入a(例如5)和b(比如7)的值到第一个终端。
答案 0 :(得分:1)
我认为你必须改变一些事情,因为你想从脚本中传递参数。
C ++程序main.cpp:
#include <iostream>
#include <stdlib.h>
using namespace std;
int main(int argc,char *argv[])
{
if(argc==1)
{
exit(1);
}
int a=atoi(argv[1]);
int b=atoi(argv[2]);
cout<<a+b<<endl;
return 0;
}
和shell脚本将是:
#!/bin/bash
g++ temp.cpp -o out
a=5
b=2
./out "${a}" "${b}"
答案 1 :(得分:1)
我没有尝试编写与多个终端交互或使用管道的程序,而这可能更复杂,我建议让程序更简单让它处理命令行参数。您可以按如下方式重新编写C ++程序:
#include <iostream>
#include <cstdlib> // for atoi function
using namespace std;
int main(int argc, char* argv[]) // to accept CLI inputs
{
// argv[0] has path/name to this program
// argv[1] has 1st argument, if provided
// argv[2] has 2nd argument, if provided
// if argc != 3, then we don't have everything we expected, and we bail
if(argc != 3) {
cerr << "usage: " << argv[0] << " arg1 arg2" << endl;
return -1;
}
// for simplicity, we assume that you won't get letters, only numbers
int a = atoi(argv[1]);
int b = atoi(argv[2]);
cout << (a + b);
return 0;
}
然后,您可以编写一个简单的shell脚本,以使用您想要的任何参数启动您的程序。例如,如果您的构建程序被调用test
(使用g++ -o test test.cpp
来构建),那么您可以使用此示例launcher.bash
脚本:
#!/bin/bash
for i in {0..10}
do
./test $i $i
echo
done
该脚本生成以下输出:
/tmp ❯ ./launcher.bash
0
2
4
6
8
10
12
14
16
18
20
答案 2 :(得分:0)
如果可执行文件是 a.out ,则可以使用
a=5;b=7;echo $a $b | ./a.out
顺便说一句,在您的示例中, cout / cin 的名称空间缺失(例如在using namespace std; >的#include 强>)。