我有一個C++算法這需要在一些用戶輸入,所以大致類似從終端發送的C++輸入在一行
./sum.out
Enter a: 2
Enter b: 3
Sum is 5
在UNIX殼。我想要做的是通過使用另一個發送幾個system("./sum.out")
命令的C++文件來自動化進程,但我不知道如何使它也發送參數,即a
和b
在我的情況。換句話說,我想讓第二個文件提供參數而不是用戶。
我有一個C++算法這需要在一些用戶輸入,所以大致類似從終端發送的C++輸入在一行
./sum.out
Enter a: 2
Enter b: 3
Sum is 5
在UNIX殼。我想要做的是通過使用另一個發送幾個system("./sum.out")
命令的C++文件來自動化進程,但我不知道如何使它也發送參數,即a
和b
在我的情況。換句話說,我想讓第二個文件提供參數而不是用戶。
我結束標準輸入使用格式化的字符串:
char buffer[100];
snprintf(buffer,100,"echo %d %d | ./sum.out",2,3);
system(buffer);
$ ./sum.out < in.txt
其中in.txt
是一個文本文件,其中包含輸入:
$ cat in.txt
2
3
從程序a.out
stdout重定向到的sum.out
`$ ./input.out | ./sum.out`
我無法真正使用它,因爲每次運行代碼時,我的a和b都會有所不同。 – EagerHEP
請選擇C或C++作爲標記。不是都。根據您選擇的最適合的答案可能會有所不同。它是否必須通過'system'來完成? – kaylum
不,它不是,它只是我知道這麼做的唯一方法 – EagerHEP
還有一些更優雅但更復雜的方式來使用'pipe','fork','exec'和'dup'來做到這一點。 。如果你想要一些簡單的東西,可以做'system(「echo 2 3 | ./sum.out」);'。請注意,'system'內的字符串可以動態生成。通過使用諸如'snprintf'的東西來將格式化的字符串存儲到緩衝區中,然後將該緩衝區傳遞給'system'。或者更好的是(恕我直言)是拋棄C/C++測試程序方法altogther並編寫一個shell腳本來測試你的程序。 – kaylum