2008-10-21 11 views
2

Я в настоящее время преподавательский помощник для Введение в класс C. Класс изучается с использованием Visual Studio, но при классификации я просто использую простой пакетный скрипт Windows для обработки всех представлений присваивания, компиляции их, запуска их в тестовом файле и перенаправления вывода в ряд текстовых файлов, которые я могу распечатать выставлять, разыгрывать и возвращать ученикам. Весь процесс работает очень хорошо, за исключением того факта, что когда я перенаправляю stdin, он не появляется в перенаправленном stdout так же, как это происходит, когда тот же самый stdin вводится непосредственно в консоль. Из-за этого вывод кода, отформатированного для консоли, не отображается корректно на перенаправленном выходе. Следующие примеры файлов показывают эту проблему. Кто-нибудь знает о простом решении?Переадресовать Stdin и Stdout в файл

Файл: example.c

#include <stdio.h> 

int main() 
{ 
    int v; 
    printf("Enter a number: "); 
    scanf("%i", &v); 
    printf("You entered: %d\n", v); 
    return 0; 
} 

файла: input.txt

42 

Output (консоли)

C:\>example.exe 
Enter a number: 42 
You entered: 42 

C:\> 

Output (Перенаправление)

C:\>example.exe <input.txt> output.txt 

C:\>more output.txt 
Enter a number: You entered: 42 

C:\> 

ответ

4

Ожидается (правильное) поведение. Вход никогда не является частью stdout. Если вы делаете example.exe > output.txt и слепо введите 42, вы должны ожидать, что 42 также отображается только один раз на выходе.

Единственное решение, о котором я мог думать, это то, что терминал/оболочка записывает сеанс в целом. Командная оболочка Windows не способна на это. Вы могли бы написать свой собственный прокси-сервер, хотя он загружает stdin в программу ученика и сам считывает сам вывод, одновременно записывая оба. Это довольно легко сделать для вывода другой программы и перенаправить ее на stdin/out под POSIX (предоставляемый Cygwin), но я не знаю об обычных DOS/Windows.

+0

Я понимаю, что поведение, которое я вижу, является правильным. То, что я хотел бы сделать, - подделка поведения консоли с помощью скрипта. У вас есть короткий пример того, как это сделать с POSIX? (Я уже давно работал с Cygwin/* nix и не имею проблем с использованием, если это то, что нужно.) – 2008-10-21 16:36:40