Скажем, у меня есть следующая простая программа C ++,

#include <bits/stdc++.h>
using namespace std;

int main() { //no argv or argc allowed
    cin >> t;
    while(t--) {
        int n;
        cin >> n;
        // do whatever
    }
}

И следующая команда в терминале:

g++ -std=c++17 -O2 -lm b.cpp && ./a.out

Когда я запускаю эту команду, она попросит мой вклад, и я должен копировать и вставлять по входу, как следующее:

7
1 2 
2 4 
2 6
7 5
3 6
4 6
7 2

Есть ли способ, чтобы это произошло в одном проходе? Я не против копирования и вставки каждый раз, однако я планирую сделать сценарий Shell для автоматизации этого для меня. В основном, он принимает вход, хранящийся на удаленном HTTP-сервере, а затем передает его через программу C ++. Будьте, по какой-то причине мне не разрешено писать файлы, поэтому я не могу сделать FSTReam / FreoPen.

-2
VJZGamingHD 8 Июн 2021 в 01:34

2 ответа

Лучший ответ

Подстановка процесса не является правильным способом сделать это. Используйте Heredoc:

g++ -std=c++17 -O2 -lm b.cpp && ./a.out << EOF
7
1 2 
2 4 
2 6
7 5
3 6
4 6
7 2
EOF
2
William Pursell 7 Июн 2021 в 23:17

Одним из способов является использование Замена процесса Bash для создания «Файл» из команды. А затем перенаправьте этот файл в программу.

Примере:

#!/bin/bash

data="
7
1 2 
2 4 
2 6
7 5
3 6
4 6
7 2
"

./a.out < <(echo ${data})

Обратите внимание, что {data строка не очень многослойна в этом случае, но не требуется для отображения программы.

1
kaylum 7 Июн 2021 в 22:57