Pregunta

Actualmente soy el Asistente de enseñanza para una clase de Introducción a C . La clase se imparte con Visual Studio, pero cuando califico, solo uso un simple script por lotes de Windows para procesar todos los envíos de tareas, compilarlos, ejecutarlos en un archivo de prueba y redirigir la salida a una serie de archivos de texto que puedo imprimir marque, marque y devuelva a los estudiantes. Todo el proceso funciona muy bien, excepto por el hecho de que cuando redirijo stdin, no aparece en el stdout redirigido de la misma manera que cuando el mismo stdin se escribe directamente en la consola. Debido a esto, la salida del código formateado para la consola no se muestra correctamente en la salida redirigida. Los siguientes fragmentos de archivo muestran este problema. ¿Alguien sabe de una solución simple?

Archivo: example.c

#include <stdio.h>

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

Archivo: input.txt

42

Salida (Consola)

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

C:\>

Salida (Redirección)

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

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

C:\>
¿Fue útil?

Solución

Este es el comportamiento esperado (correcto). La entrada nunca es parte de la salida estándar. Si lo hace example.exe > output.txt y escriba ciegamente 42, debe esperar que 42 también aparezca una sola vez en la salida.

La única solución en la que podría pensar es que el terminal / shell graba la sesión en su totalidad. El shell de comandos de Windows no es capaz de eso. Sin embargo, podría escribir su propio proxy de terminal, que alimenta la entrada estándar en el programa del alumno y lee la salida en sí, mientras escribe ambos de forma combinada. Es bastante fácil de bifurcar para la ejecución de otro programa y redireccionar la entrada / salida de ese programa bajo POSIX (proporcionado por Cygwin), aunque no conozco DOS / Windows sin formato.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top