2

私は現在、C 入門クラスのティーチング アシスタントを務めています。クラスは Visual Studio を使用して教えられていますが、採点の際には単純な Windows バッチ スクリプトを使用して、すべての課題提出物を処理し、コンパイルして、テスト ファイルで実行し、出力を印刷可能な一連のテキスト ファイルにリダイレクトします。出して、マークアップして、学生に返します。stdin をリダイレクトすると、同じ 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

1 に答える 1

4

これは予想される (正しい) 動作です。入力が stdout の一部になることはありません。やみくもに 42 と入力するexample.exe > output.txtと、42 も出力に 1 回しか表示されないことが予想されます。

私が考えることができる唯一の解決策は、ターミナル/シェルがセッション全体を記録することです。Windows コマンド シェルはそれができません。ただし、標準入力を学生のプログラムにフィードし、出力自体を読み取り、両方を組み合わせて書き出す独自のターミナル プロキシを作成することもできます。別のプログラムの実行のために fork し、その stdin/out を POSIX (Cygwin によって提供されます) でリダイレクトするのは非常に簡単ですが、プレーンな DOS/Windows については知りません。

于 2008-10-21T05:13:48.423 に答える