Как прочитать вывод исходного кода в другой программе с C ++ - PullRequest
2 голосов
/ 13 февраля 2020

Я думаю, что действительно сложно объяснить, чего я хочу. Но позвольте мне попробовать. (Я пытаюсь создать программу для оценки домашней работы студента по программированию)

Существует множество простых исходных кодов на C ++. (Пожалуйста, подумайте, , есть более 100 файлов кодов )

// C:\homework1\studentA.cpp
int main()
{
    cout << "The answer is 456" << endl;
}

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

Как мне прочитать стандартный вывод (ответ 456) в другой программе ? Есть ли какая-либо функция для «компиляции исходного кода» и «сохранения стандартного вывода»?

Ответы [ 2 ]

4 голосов
/ 13 февраля 2020

Я бы использовал bash скрипт для этого вместо C ++. Что-то вроде:

g++ $filename
./a.out > student_answer.txt
diff -q student_answer.txt expected_answer.txt

Тогда $? скажет вам, был ли ответ правильным.

1 голос
/ 13 февраля 2020

Как я могу прочитать стандартный вывод (ответ 456) в другой программе?

Вы не можете сделать это без помощи вашей операционной системы . Потому что у вас нет (в общем, согласно C ++ 17 стандарта ) какой-либо «другой программы», работающей (читайте о процессов ). Если у вас есть, пожалуйста, поблагодарите свою ОС. Прочитайте учебник об операционных системах .

Однако на Linux вы можете просто использовать popen (3) (или fork (2) , execve (2) , pipe (7) so pipe (2) , dup2 (2) , waitpid (2) ) и в операционных системах, для которых Qt был портирован (включая Windows, но читайте о WinAPI ), вы можете использовать QProcess .

Если вы параноик, рассмотрите возможность использования методов setuid и / или ch root (возможно, с LX C) на Linux для повышения безопасности вашего инструмента.

Смотрите также библиотеку фреймворка POCO .

...