Загрузка...

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

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

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

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

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


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

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

    Для того, чтобы получить вводимые значения из буфера потока командной строки в 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 468 8 янв 2022
    Ты слишком сумбурно всё описал. На сервер обычно уходят твои исходники, там на сервере они компилирутся и там же запускаются с разными входными данными (обычно переопределяется входной поток со стандартного например на файл с тестовыми данными). Считать всё содержимое стандартного потока как текст вообще не проблема, вопрос только как показать этот текст тебе - продвинутые системы такого типа не показывают содержимое стандартного потока вывода после выполнения программы, иначе было бы элементарно просто вывести входные данные в консоль. Пару раз мне удавалось обмануть такие системы бросая исключение с текстом который я хотел вывести - программа падала а тестова система писала мне что тест провален с такой-то ошибкой и выводила текст из исключения.
     
Загрузка...
Top