Как передать значения в scanf () через командный файл Windows - PullRequest
0 голосов
/ 21 октября 2019

Я хочу быстро оценить HW своих учеников, поэтому я решил написать пакетный скрипт для этой цели. Я знаю, что это проще сделать в Ubuntu, но поскольку студенты обязаны кодировать свои HW в Windows, я должен оценить их и в Windows. Ну, пока я написал следующий пакетный файл, но он не принимает переменную char.

Обратите внимание, что цель HW - нарисовать прямоугольник и заполнить его символом, заданным клавиатурой (scanf)

@echo off
set file=%1
gcc %file% -o %file%.exe
REM Followings are "row col fill" respectively
echo 6 10 A | %file%.exe :: #1
echo 6 6   | %file%.exe :: #2
move %file% graded\
move %file%.exe graded\

Здесь, как на # 1, так и на # 2,он рисует прямоугольник с пробелами, однако в # 1 он должен заполнить его A с.

В случае, если мои студенты смогут найти этот вопрос в Интернете, я не могу выложить здесь полное решение, но я могу показать scanf() char part:

//take num_of_rows and num_of columns
....
printf("\nFilling char?: ");
fflush(stdin);
scanf("%c",&fill);
...
//draw rectangle

И, наконец, воттребуемый вывод:

TEST-1
Enter number of rows (between 3-20) : 5
Enter number of columns (between 3-80) : 40
Enter a filling character (one char) : #
 +--------------------------------------+
 |######################################|
 |######################################|
 |######################################|
 +--------------------------------------+
TEST-2
Enter number of rows (between 3-20) : 8
Enter number of columns (between 3-80) : 25
Enter a filling character (one char) : (blank)
 +-----------------------+
 |                       |
 |                       |
 |                       |
 |                       |
 |                       |
 |                       |
 +-----------------------+

ПРЕДУПРЕЖДЕНИЕ: Пожалуйста, не ставьте полное решение кода C, так как это HW.

1 Ответ

0 голосов
/ 21 октября 2019

Поскольку у меня нет работающей Windows и я не знаю, как выглядит остальная часть решения домашней работы, это может работать, а может и не работать. Возможно, fflush(stdin) очищает только текущий вход строка , а не полный ввод.

Вы сказали (в комментариях), что ваш пример решения работает без пакета.

Тогда вы можете попытаться поместить ввод в отдельные строки входного файла, который будет вводиться в домашние программы:

echo.6>   input.txt
echo.10>> input.txt
echo.A>>  input.txt
%file%.exe < input.txt

echo.6>  input.txt
echo.6>> input.txt
echo. >> input.txt
%file%.exe < input.txt

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

Некоторые примечания:

  • Точка после echo заставляет думать, что аргументдано. Особенно в последней показанной команде в противном случае будет просто выводиться «Эхо включено» (или ВЫКЛ.)иметь один на входе после числа.

  • В соответствующей третьей команде есть только один символ между echo. и >> input.txt. Это символ заполнения, 'A' и пробел, соответственно

  • Вы можете опустить пробел между >> и именем файла input.txt. Это просто для ясности.

  • На всякий случай, если вы не знаете: > очищает выходной файл перед записью в него;>> добавится к нему.

...