Domanda

Sono attualmente l'assistente didattico per una classe Introduzione alla classe C . La lezione viene impartita utilizzando Visual Studio, ma durante la valutazione utilizzo solo un semplice script batch di Windows per elaborare tutte le richieste di assegnazione, compilarle, eseguirle su un file di prova e reindirizzare l'output su una serie di file di testo che posso stampare fuori, segna e restituisci agli studenti. L'intero processo funziona molto bene, tranne per il fatto che quando reindirizzo stdin, non appare nello stdout reindirizzato nello stesso modo in cui lo fa quando lo stesso stdin viene digitato direttamente nella console. Per questo motivo, l'output del codice formattato per la console non viene visualizzato correttamente nell'output reindirizzato. I seguenti frammenti di file mostrano questo problema. Qualcuno sa di una soluzione semplice?

File: esempio.c

#include <stdio.h>

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

File: input.txt

42

Output (console)

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

C:\>

Output (reindirizzamento)

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

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

C:\>
È stato utile?

Soluzione

Questo comportamento è previsto (corretto). L'input non fa mai parte di stdout. Se esegui example.exe > output.txt e digita ciecamente 42, dovresti aspettarti che anche 42 venga visualizzato una sola volta nell'output.

L'unica soluzione che mi viene in mente è che il terminale / shell registri la sessione nel suo insieme. La shell dei comandi di Windows non è in grado di farlo. Tuttavia, potresti scrivere il tuo proxy terminale, che alimenta lo stdin nel programma dello studente e legge l'output stesso, mentre scrive entrambi in modo combinato. È abbastanza facile effettuare il fork per l'estrazione di un altro programma e reindirizzare il proprio stdin / out in POSIX (fornito da Cygwin), tuttavia non conosco il semplice DOS / Windows.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top