2015-11-12 1 views
0

Довольно просто, мне нужно протестировать программу на C, введя в нее большое количество целых чисел. Для этого в этом случае мне нужно запустить программу, а затем, когда она ждет ввода пользователя (scanf («% d, integer)), мне нужно дать ему целое число из цикла, в котором я сейчас.Нужно сценарий оболочки для автоматического ввода 1-10000 в программу

прямо сейчас у меня есть

for i in {1..5}; 
do 
(echo -n "$i" && ./a2 $i) 
done 

, но он все еще только ожидает ввода пользователя, то после ввода пользователь получает, печатает целое петли я на. Я попытался несколько примеров из аналогичные проблемы, которые я обнаружил при обмене стеками и в других местах, но до сих пор не повезло. Мне никогда не приходилось сталкиваться с сценариями оболочки раньше, так что, наверное, это что-то простое, я делаю backasswordsly, но никто раньше не делал ничего плохого.

+7

Возможно: 'seq 1 10000 | ./a2' - это то, что вам нужно? Это запускает программу один раз и подает ей номера от 1 до 10000 на стандартном входе. Он получит EOF после того, как он прочитает 10000. Но, может быть, если вам просто нужны номера от 1 до 10000, у вас должен быть процесс обработки пары аргументов командной строки и генерация самих чисел? –

+0

Существует разница между аргументами командной строки и стандартным вводом. – Biffen

+0

Попробуйте '' 'вместо' && '. (Примечание: в сценариях оболочки '|' is * not * OR, но что-то совсем другое) – immibis

ответ

3

Попробуйте это!

for i in `seq 1 1000`; do echo $i | ./a2; done 

Ваше решение

echo -n "$i" && ./a2 $i 

будет проходить $ я в качестве аргумента для а2 не вход.

+1

Ну, так как это bash, будет выполняться простой './a2 <<(seq 1 10000)'. (* note: * 'space' между' <<'.) –

+0

Спасибо, это сделал трюк! –

1

Я думаю, что то, что вам нужно, обычно не делается с использованием сценария оболочки.

Вы можете написать c code, чтобы сгенерировать ваш ввод, который в этом случае является числом от 1 до 1 000. Пусть этот файл будет testGenerator.c. Затем запустите это на терминале:

gcc testGenerator.c 
./a.out >input 

Это создаст файл, названный input, который будет иметь номера от 1 до 10000, что, конечно, о/р testGenerator.c.

Затем, если ваша программа, в которой вы хотите вход компилируется в a2, как я погляжу, вы можете запустить его:

./a2 <input >output 

и вы получите требуемую мощность в файле output. Если вы не пишете >output здесь, вы увидите o/p на терминале.

Кроме того, когда вы работаете этот сценарий, вы на самом деле работаете в a2 10000 раз и даете номер в качестве аргумента командной строки, которая очень отличается от принятия вклада от stdin, который, конечно, scanf делает.

0
for i in {1..1000}; do echo $i | ./a2; done