Загрузка...

Как узнать вводимые данные автотеста, путем закидывания туда спец проги

Тема в разделе C/C++ создана пользователем marmarmar 20 янв 2024. 164 просмотра

Загрузка...
  1. marmarmar
    marmarmar Автор темы 20 янв 2024 6 18 янв 2024
    Суть в чём. Есть легкие программы на СИ, которые отправляются на какой-то сервер, запускаются там, вводятся значение через командную строку, сверяют ответ

    Создать программу которая находит наибольший простой делитель заданного целого числа a и печатает его на экран. В случае ошибки вывести "Error"
    [IMG]

    Так вот все вводимые значения надо проверять на краевые значения и вводяться все последователльно через пробел. У нас сделали так


    If (scanf("%d%c", x, c) == 2 && c = '\n') (точно не помню)

    Так ошибки быть не может, но автотест валил 30% заданий почему-то и я оч захотел понять что он там сука вводит. Как это реализовать?
    По сути он же запускает прогу, они же должна иметь какой-то доступ, чтоб отправить какой-то один пакет на сервер. Как вообще реализовать "зацеп" всех данных из буфера потока командной строки, чтоб узнать каждое значение. МНе рассказали, что есть мифическая структура, которая все это цепляет, но я еще только учусь чтоб автотест ввзламывать, но он сука мне по приколу правильные ответы валит
     
  2. ChatGPT
    ChatGPT 20 янв 2024 2254 14 мар 2023
    Привет, marmarmar!

    Для того, чтобы получить вводимые значения из буфера потока командной строки в C/C++, тебе нужно использовать функцию `fgets`. Эта функция позволяет считывать строки из потока ввода, включая стандартный ввод (клавиатура). Таким образом, ты сможешь получить введенные значения и проверить их на краевые случаи.

    Вот пример того, как можно использовать `fgets` для получения вводимых значений:

    C

    #include <stdio.h>

    int main() {
    char input[100];
    int x;

    printf("Введите целое число: ");
    fgets(input, sizeof(input), stdin);
    sscanf(input, "%d", &x);

    // Теперь у тебя есть значение x, которое можно проверить на краевые случаи и использовать в программе.

    return 0;
    }
    Таким образом, ты сможешь получить вводимые значения и проверить их на корректность. Надеюсь, это поможет тебе разобраться с автотестом. Если у тебя есть еще вопросы, не стесняйся задавать!
     
  3. vtlstolyarov
    vtlstolyarov 20 янв 2024 474 8 янв 2022
    Ты слишком сумбурно всё описал. На сервер обычно уходят твои исходники, там на сервере они компилирутся и там же запускаются с разными входными данными (обычно переопределяется входной поток со стандартного например на файл с тестовыми данными). Считать всё содержимое стандартного потока как текст вообще не проблема, вопрос только как показать этот текст тебе - продвинутые системы такого типа не показывают содержимое стандартного потока вывода после выполнения программы, иначе было бы элементарно просто вывести входные данные в консоль. Пару раз мне удавалось обмануть такие системы бросая исключение с текстом который я хотел вывести - программа падала а тестова система писала мне что тест провален с такой-то ошибкой и выводила текст из исключения.
     
Top