автоматизировать консольный ввод в C ++ - PullRequest
0 голосов
/ 05 ноября 2019

Я участвую в нескольких онлайн-упражнениях по программированию на C ++.

Здесь дано описание проблемы для проверки понимания цикла "for" в C ++.

Формат ввода

Вам будут даны два натуральных числа a и b (a <= b), разделенные новой строкой. </p>

Формат вывода

Для каждого целого числа в интервале [a, b:

Если 1 <= n <= 9, выведите английское представление в нижнем регистре. Это «один» для, «два» для и так далее. Иначе, если n> 9 и это четное число, выведите «четное». Иначе, если n> 9 и это нечетное число, выведите «odd».

Пример ввода

8 11

Пример вывода

 eight
 nine
 even
 odd

Я написал программу, как показано ниже, и тестовый пример пройден.

int main() {
    int a, b;
    cin >> a;
    cin >> b;
    string num[9] = {"one", "two", "three", "four", "five", "six", "seven",                             "eight", "nine"};

    for(int n=a; n<=b;n++)
    {
        if(n<=9)
            cout << num[n-1] << endl;
        else
            if(n%2==0)
                cout << "even\n";
            else
                cout << "odd\n";
    }
    return 0;
}

Во время тестирования я ввожу значения для «a» и «b».

Iмогу понять, когда я отправляю свой код онлайн, выполняются тесты и показываются результаты.

Мой вопрос, как ввод автоматизирован ?. Я также хочу протестировать мой код с автоматизацией без ввода ввода на консоли.

Пример кода для автоматизации будет полезен. Это понимание будет полезно, так как я буду продвигаться вперед в работе над сложными проблемами, где потребуется больше входных данных, поэтому я не хочу вводить вручную в cin с консоли и хочу автоматизировать это, пока я тестирую на своем ноутбуке, так же, каккак работает онлайн-инструмент для автоматизированного тестирования.

Спасибо за ваше время и помощь.

Ответы [ 2 ]

3 голосов
/ 05 ноября 2019

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

Учитывая, что большинство онлайн-компиляторов, вероятно, работают на сеансах Linux, они могут просто сделать следующее:

  1. Создать однофайловое решение, используя (например) gcc -o venkysmarty-exo-3
  2. Выполните его, но переопределите stdin, чтобы он был желаемым файлом (например, ./venkysmarty-exo-3 < ./test_data/exo-3/input.txt)

В более общем случае в большинстве систем Unix и, по крайней мере, во время работы bash, оператор> может бытьиспользуется для перенаправления стандартного вывода, а <для перенаправления стандартного ввода. Если вы не используете имя файла, но открыли дескриптор файла / канала, добавьте к дескриптору префикс & (например, python max.py <& 64, где 64 - дескриптор файла.) </em>

В Windows в пакетном режимеФайл-дескриптор, вероятно, не работает, но базовые операторы>, <и >> работают одинаково:

Some tests with stdin overwrite under Windows 10 in batch

0 голосов
/ 05 ноября 2019

Так что я отвечу на ваш вопрос 2 способами. Во-первых, вместо того, чтобы запрашивать значение с помощью

    cin >> a

, вы можете использовать

    int main(int argc, char *argv[])

в качестве входных данных в Visual Studio и для этого вы переходите к «Отладка», «имя проекта»свойства, а затем перейти к отладке. Вы должны увидеть что-то, называемое аргументами команды, и вы можете поместить туда любой ввод, который вы хотите.

Второй способ сделать «автоматический» ввод - поместить все ваши входные значения в файл. Оттуда вы можете открыть файл и прочитать значения из файла. Если вы не знаете, как читать и писать в файл, я рекомендую воспользоваться этой ссылкой здесь.

http://www.cplusplus.com/doc/tutorial/files/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...