2008-10-21 140 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

相關問題