Question

Je suis actuellement assistant pédagogique pour un cours Introduction à C . Le cours est enseigné à l'aide de Visual Studio, mais lors de la notation, je n'utilise qu'un simple script batch Windows pour traiter toutes les soumissions d'assignations, les compiler, les exécuter sur un fichier de test et rediriger la sortie vers une série de fichiers texte que je peux imprimer. out, annotez et remettez aux étudiants. L'ensemble du processus fonctionne très bien, sauf que lorsque je redirige stdin, il n'apparaît pas dans la sortie standard redirigée de la même manière que lorsque le même stdin est saisi directement dans la console. De ce fait, la sortie du code mis en forme pour la console ne s'affiche pas correctement dans la sortie redirigée. Les extraits de fichier suivants montrent ce problème. Est-ce que quelqu'un connaît une solution simple?

Fichier: exemple.c

#include <stdio.h>

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

Fichier: input.txt

42

Sortie (Console)

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

C:\>

Sortie (redirection)

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

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

C:\>
Était-ce utile?

La solution

Ceci est le comportement attendu (correct). L'entrée ne fait jamais partie de stdout. Si vous faites exemple.exe > output.txt et tapez aveuglément 42, vous devriez vous attendre à ce que 42 n'apparaisse également qu'une fois dans la sortie.

La seule solution à laquelle je puisse penser est que le terminal / shell enregistre la session dans son ensemble. Le shell de commande Windows n'en est pas capable. Vous pouvez cependant écrire votre propre serveur proxy terminal, qui alimente stdin dans le programme de l'étudiant et lit le résultat lui-même, tout en écrivant les deux de manière combinée. Il est assez facile de rechercher un autre programme et de rediriger ce stdin / out sous POSIX (fourni par Cygwin). Je ne connais toutefois pas le langage DOS / Windows.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top