Pergunta

Eu sou atualmente o assistente de ensino para um Introdução ao C classe. A classe está sendo ensinada usando Visual Studio, mas quando grading eu só uso um simples script de lote do Windows para processar todos os envios de atribuição, compilá-los, executá-los em um arquivo de teste, e redirecionar a saída para uma série de arquivos de texto posso imprimir fora, marcar, e de volta a mão para os alunos. Todo o processo funciona muito bem, exceto pelo fato de que quando eu redirecionar stdin, ele não aparece na redirecionado stdout da mesma maneira que faz quando o mesmo stdin é digitado diretamente no console. Devido a isso, a saída do código formatado para o console não exibe corretamente na saída redirecionada. Os seguintes trechos de arquivo mostram este problema. Alguém sabe de uma solução simples?

arquivo: example.c

#include <stdio.h>

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

arquivo: input.txt

42

Output (Console)

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

C:\>

Output (redirecionamento)

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

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

C:\>
Foi útil?

Solução

Esta é esperado (correto) comportamento. A entrada não é parte de stdout. Se você fizer example.exe > output.txt e cegamente digitar 42, você deve esperar que 42 também mostra-se apenas uma vez na saída.

A única solução que eu poderia pensar é que o terminal / shell registra a sessão como um todo. shell de comando do Windows não é capaz disso. Você poderia escrever seu próprio proxy do terminal, porém, que alimenta stdin para o programa do aluno e lê o output, enquanto escrevendo tanto de forma combinada. É bastante fácil de garfo para exection de outro programa e redirecionamento que um de stdin / out sob POSIX (fornecido pela Cygwin), eu não sei sobre simples DOS / Windows embora.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top