標準入力と標準出力をファイルにリダイレクト
-
03-07-2019 - |
質問
現在、 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:\>
解決
これは予想される(正しい)動作です。入力がstdoutの一部になることはありません。 example.exe&gt;を実行した場合output.txt
と42をやみくもに入力すると、42も出力に一度しか表示されないことが予想されます。
考えられる唯一の解決策は、ターミナル/シェルがセッション全体を記録することです。 Windowsコマンドシェルには対応していません。ただし、独自のターミナルプロキシを記述することもできます。これは、stdinを学生のプログラムにフィードし、出力自体を読み取りながら、両方を組み合わせて書き出します。別のプログラムの実行のために分岐し、POSIX(Cygwinによって提供された)の下でそのstdin / outをリダイレクトすることは非常に簡単ですが、単純なDOS / Windowsについては知りません。