14

現在、標準入力から読み取るプログラムがあります。入力が行われない場合、プログラムを実行し続ける必要がある場合があります。通常、これはテストスクリプトであり、いわば「入力」はありません。

program -v1 -v2 -v3 <input >output

v1 - v3 はそれぞれコマンドライン引数です

基本的に、「入力」が指定されていない場合、プログラムはコマンドライン引数とそれぞれの意味をプログラムに吐き出し、終了する必要があります。

ただし、現時点では、空のテスト ファイルを指定するか、実行後に Enter キーを押さずに実行すると、コマンドの入力に使用する std::getline でブロックされます。

while(std::getline(std::cin,foo)
{do stuff}

foo は文字列です。

do stuff入力がない場合に実行して、少なくとも1回は終了するようにするにはどうすればよいですか? 入力のdo stuff場合、 は標準入力のすべての行に対して 1 回発生します。

do-while ループに切り替えて、入力があるかどうかを pre ループでチェックするとうまくいくでしょうか?

何かのようなもの

if cin empty
set flag

do
 {do stuff
 check flag}
while(getline)

それともC ++ではノンブロッキングioは不可能ですか?

この質問は何度も再ハッシュされているようですが、決定的な答えや、プラットフォームに依存しない答えさえ見つけることができませんでした (このプログラムは本質的にアカデミックであり、Windows でコーディングされ、UNIX でテストされています)。

4

3 に答える 3

0

cin.peek読み取るものがあるかどうかを確認し、ある場合は呼び出すことができますgetline。ただし、非ブロッキングの getline 自体はありません。

于 2013-05-16T16:25:02.467 に答える