Я делаю программу оценки C через Java, в которой есть куча вопросов по программированию для C, и она позволяет пользователю вводить ответ в виде кода на C, а затем нажимает кнопку «Compile», которая связан с файлом bat, который запускает код пользовательского ввода через gcc.
У меня работает ввод и компиляция, но мне нужно получить вывод от компилятора и распечатать текстовое поле в программе. Я могу получить простую компиляцию «Hello, world», но у меня возникают проблемы с получением программ, которые, например, требуют печати пользовательского ввода с помощью scanf.
else if(e.getSource().equals(compile)){
if(questionNumber<1){
JOptionPane.showMessageDialog(programFrame, "Please start the assessment", "Compile Error", JOptionPane.ERROR_MESSAGE);
}
else{
FileOutputStream fileWrite;
try {
fileWrite = new FileOutputStream("demo/demo.c");
new PrintStream(fileWrite).println(input.getText());//saves what the user has entered in to a C source file
fileWrite.close();
@SuppressWarnings("unused")
Process process = Runtime.getRuntime().exec("cmd /c compile.bat");//runs the batch file to compile the source file
compileCode();
try{
fileStream = new FileInputStream("demo/output.txt");
inputStream = new DataInputStream(fileStream);
bufferRead = new BufferedReader(new InputStreamReader(inputStream));
while((stringLine = bufferRead.readLine())!=null){
compiled.append(stringLine);
compiled.append("\n");
}
inputStream.close();
}
catch(IOException exc){
System.err.println("Unable to read file");
System.exit(-1);
}
}
catch (IOException exc) {
JOptionPane.showMessageDialog(programFrame, "Demo file not found", "File Error", JOptionPane.ERROR_MESSAGE);
}
}
Это метод actionPerformed для кнопки «Скомпилировать», compileCode () - это JFrame, который отображает вывод, а «скомпилированный» - это textArea для вывода.
Мой командный файл:
C:
cd dev-cpp\bin
gcc.exe H:\workspace\QuestionProgram\demo\demo.c -o demo > H:\workspace\QuestionProgram\demo\compilestatus.txt
demo > H:\workspace\QuestionProgram\demo\output.txt
Я не уверен, как я могу это сделать, поэтому создается рамка для вывода кода, если код требует ввода данных пользователем, поскольку командная строка не открывается без добавления «START» в .exec () , но затем рамка появляется до завершения работы программы.
Кроме того, как я могу получить выходные данные компилятора, если компиляция не удалась из-за ошибки? То, как я сейчас это сделал в моем пакетном файле, ничего не помещает в текстовый файл, если это не удается.