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