Как скопировать и запустить команду в другом терминале

У меня есть простая программа, например в 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

Решение

Я думаю, что вы должны что-то изменить, чтобы сделать так, как вы хотите передать аргументы из сценария.
Программа на 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;
}

и сценарий оболочки будет:

 #!/bin/bash

g++ temp.cpp -o out
a=5
b=2
./out "${a}" "${b}"

Тебе следует увидеть Вот для передачи переменных. это также

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;
}

Затем вы можете написать простой сценарий оболочки для запуска вашей программы с любыми аргументами, которые вы хотите. Например, если ваша встроенная программа называется 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
1

Если исполняемый файл a.out тогда вы можете использовать

a=5;b=7;echo $a $b | ./a.out

Кстати, в вашем примере Пространство имен за соиЬ/CIN отсутствует (например, добавить using namespace std; после #включают).

0
По вопросам рекламы [email protected]