Statt mit mehreren versuchen, ein Programm zu schreiben, die in Wechselwirkung sehen sollten Terminals oder arbeitet mit Rohren, die komplizierter sein könnten, würde ich empfehlen, Ihr Programm einfacher zu machen, indem Sie es behandeln Kommandozeilenargumente. Sie können neu schreiben Sie Ihr C++ Programm wie folgt:
#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;
}
Sie können dann einen einfachen Shell-Skript schreiben, das Programm zu starten, mit dem, was Argumenten, die Sie wollen. Zum Beispiel, wenn die integrierte Programm test
genannt wird (verwenden g++ -o test test.cpp
zu bauen), dann können Sie dieses Beispiel launcher.bash
Skript verwenden:
#!/bin/bash
for i in {0..10}
do
./test $i $i
echo
done
Das Skript erzeugt die folgende Ausgabe:
/tmp ❯ ./launcher.bash
0
2
4
6
8
10
12
14
16
18
20
auf Rohrleitungen lesen, und das 'echo'-Kommando –
Haben Sie darüber nachgedacht, Ihr Skript so zu schreiben, dass * es * das Programm selbst startet und dann direkt mit ihm interagiert, anstatt zu versuchen, mit mehreren Terminals zu arbeiten? – ray
Eine andere einfachere Empfehlung wäre, dass Ihr C++ - Programm Befehlszeilenargumente akzeptiert, damit Ihr Skript es mit beliebigen Eingaben aufrufen kann (z. B. './your-program.out 5 7'). Ihr C++ - Programm müsste nur die eingegebenen Zahlenstrings in tatsächliche Zahlen konvertieren (siehe 'atoi' Funktion) – ray