2009-07-05 8 views
3

それも可能ですか?C/C++プログラムからstdinへの入力を追加しますか?

コードには多くのscanf行が含まれています。デバッグ時に手動で値を手動で実行したり追加したりする代わりに、stdinにデータを「フィードする」ことができます。これにより、scanfが読み込みを開始すると、端末と対話する必要なしに入力データを読み込みます。

答えて

13

ファイルにテストラインを入れ、そしてこのようなプログラムを実行します。何とか自分自身これを行うには、あなたのプログラムをハッキングより

myprogram < mytestlines.txt 

良いです。

コードをデバッグするときに、そのコマンドラインでデバッガを実行するようにデバッガを設定できます。

4

あなたのプログラムを多目的にするには、fscanf,fprintfなどを使用してプログラムを書き直して、コンソールIOだけでなくファイルIOをすでに処理できるようにすることをお勧めします。どのくらいの頻度プログラムがファイルのみを許可する標準入力/標準出力を処理していないので

FILE *infile, *outfile; 

if (use_console) { 
    infile = stdin; 
    outfile = stdout; 
} else { 
    infile = fopen("intest.txt", "r"); 
    outfile = fopen("output.txt", "w"); 
} 
fscanf(infile, "%d", &x); 
fprintf(outfile, "2*x is %d", 2*x); 

:あなたは標準入力から読み取りまたは標準出力に書き込みたいときに、あなただけの線に沿って何かをしますか?特に、シェルスクリプトでプログラムを使用すると、コマンドラインで入力と出力を明示的に指定することができます。

+0

これは大きなアドバイスです。高く評価され、私は将来の実装でそれを試みることを確実にするでしょう。ありがとうございました。 – Milan

0
int fd[2]; 
pipe(fd); 
close(0); // 0:stdin 
dup(fd[0], 0); // make read pipe be stdin 
close(fd[0]); 
fd[0] = 0; 

write(fd[1], "some text", 9); // write "some text" to stdin 
+0

これがOPの質問に関するものであってもいなくても、これは私にとって非常に役に立ちます。ありがとうございます。 – rsethc

関連する問題