2008-10-21 146 views
2

我目前是C类的简介。该课程正在使用Visual Studio进行教学,但在分级时,我只是使用一个简单的Windows批处理脚本来处理所有的作业提交,编译它们,在测试文件上运行它们,并将输出重定向到一系列我可以打印的文本文件出去,加注,然后交给学生。整个过程工作得很好,除了当我重定向stdin时,它不会像在同一stdin直接输入到控制台时那样出现在重定向stdout中。因此,格式化为控制台的代码的输出在重定向的输出中无法正确显示。以下文件片段显示了此问题。有谁知道一个简单的解决方案?将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 

输出(控制台)

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

C:\> 

输出(重定向)

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

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

C:\> 

回答

4

这是预期的(正确的)行为。输入不是标准输出的一部分。如果你做example.exe > output.txt并盲目输入42,你应该期望42在输出中只显示一次。

我能想到的唯一解决方案是终端/ shell将会话记录为一个整体。 Windows命令外壳没有这个能力。尽管你可以编写自己的终端代理,它将stdin提供给学生的程序并读取输出本身,同时以组合方式写出输出。分叉执行另一个程序并将其重定向到POSIX(由Cygwin提供给您)下的stdin/out是很容易的,但我不知道普通的DOS/Windows。

+0

我意识到我看到的行为是正确的。我想要做的是用脚本伪造控制台设置的行为。你有没有简单的例子来说明如何用POSIX做到这一点? (我之前已经广泛地使用过Cygwin/* nix,并且在使用这两者时都没有问题,如果这是需要的。) – 2008-10-21 16:36:40