データファイルを読み込んで情報のリストを作成するプログラムがあります
(./myProgram < dataFile.dat
)
ファイルが読み取られた後、そのターミナルウィンドウで標準入力(cin)を機能させることができず、入力を入力する機会が与えられませんが、単にそれをスキップして、格納されるランダムな値を取得する可能性があります。上記のようにファイルを読み込んだ後にcinを利用する方法はありますか?
シェル環境に応じて、ファイルをstdin以外の別のfdにフィードできます。
$ cat fd_in.c
int main()
{
unsigned char buf[1024];
int bytesread;
bytesread = read(3,buf,sizeof(buf));
printf("file is %d bytes\n",bytesread);
bytesread = read(1,buf,sizeof(buf));
printf("you entered %d bytes\n",bytesread);
}
$ gcc fd_in.c
$ ./a.out 3< fd_in.c
file is 220 bytes
my input!
you entered 10 bytes
./myProgram < dataFile.dat
これは、標準入力がdataFile.dat
キーボードからではなく、から供給されることを意味します。したがって、このようなプログラムを実行すると、標準入力からキーボードデータを読み取ることができなくなります。標準の入出力は使いやすく、プログラムを配管などに適したものにしますが、プログラムに単一の入力および/または単一の出力がある場合に最も自然に機能します。入力が2つの異なるソースからのものである場合は、プログラムでファイルを明示的に開き、を使用してファイルから読み取る必要がありますifstream
。そうすれば、キーボード入力はから引き続き利用できますcin
。
別の注意点として、読み取りが成功したかどうかを確認することをお勧めします。そうしていればcin
、ファイルの終わりに達したために、ファイルの実行後からのすべての読み取りが失敗していることがわかります。