Использовать команду Cat с кодом C

100
13

Я использую команду cat для школьного проекта.

Мне нужно предоставить txt файл в качестве ввода моего кода, а затем оценить вывод (сохраненный в txt файле). Пока я использую это в своей командной строке:

cat input_000.txt | ./main > my_output.txt

Где. /main - мой код C.

Input_000.txt структурирован следующим образом:

0 a a R 3
1 a b L 4
4 c b R 1
ecc...

У меня есть определенное количество строк из 5 символов (с пробелами между ними).

Как получить содержимое каждой строки в C-коде? Мне сказали, что используйте стандартный ввод, но я всегда использовал scanf только с клавиатуры.

Он все еще работает в этом случае?

И как мне сохранить свой результат? Обычно я использую fwrite, но в этом случае все управляется командой cat

спросил(а) 2021-01-25T18:05:30+03:00 4 месяца, 4 недели назад
1
Решение
76

То, как работают трубы, устанавливается так, что выход левой части трубы будет записан на стандартный вход для программы с правой стороны.

Короче говоря, если вы можете читать входные данные из stdin (например, вы используете plain scanf), вам вообще не придется делать никаких изменений.

Перенаправление работает примерно так же. Перенаправление в файл (>) приведет к тому, что все записи в stdout перейдут в файл. Перенаправление из файла (<) сделает все чтения из stdin из файла.

ответил(а) 2021-01-25T18:05:30+03:00 4 месяца, 4 недели назад
62

Вы можете использовать getline (или scanf) для чтения stdin (fd = 0) и сохранить его в char* в вашем C-коде... Затем вам нужно только написать в stdout (fd = 1), а ваш > будет выполните задание, чтобы записать в файл

ответил(а) 2021-01-25T18:05:30+03:00 4 месяца, 4 недели назад
63

Что вам нужно, так это внутри вашей функции...

FILE *input = fopen("input.txt","rw"); //rw (read-write)
FILE *output= fopen("output.txt","rw"); //rw (read-write)
char inputArray[500];
char outputArray[500];

while(fscanf(input,"%s", inputArray) != EOF){
//read the line and save in 'inputArray'
//you can also use %c to find each caracter, in your case I think it better...you can //save each caracter in a array position, or something like that
}

while(number of lines you need or the number of lines from your input file){
fprintf(output,"%s\n",output); //this will write the string saved in 'outputArray'
}

Если вы не хотите использовать его... тогда вы можете указать свой main.c вход с помощью <и сохранения вывода>

./main.o <input.txt> output.txt

(что-то вроде этого, это не безопаснее, потому что терминал может иметь настройки для использования другого типа кодировки...

ответил(а) 2021-01-25T18:05:30+03:00 4 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема