「cin」を使用して、入力ストリームから単語を読み取りました。
int main( ){
string Word;
while (cin >> Word){
//do sth on the input Word
}
// perform some other operations
}
コード構造は上記のようなものです。コンパイル可能です。実行中、私は次のようなものを入力し続けます
aa bb cc dd
私の質問は、この入力を終了する方法ですか?つまり、テキストファイルが「aa bbccdd」であるとします。しかし、ファイルが終了したことをプログラムに知らせる方法がわかりません。
あなたのコードは正しいです。インタラクティブに入力する場合は、CTRL-DなどのEOF文字を送信する必要があります。
このEOFファイルを読み取る場合、文字は必要ありません。これは、入力ストリームの最後に到達すると、「cin」に何も残らないためです(ストリームが現在は閉じています)、したがって、whileループは終了します。
他の人がすでにこの質問に答えているので、私はこの重要な点を追加したいと思います:
WindowsのCtrl-Z(およびUNIXシステムのCtrl-D)により、EOFに到達し、while
ループを終了しますが、while
ループの外側では、それ以上の入力を読み取ることができません。 EOFはすでに到達しています。
したがって、cin
を使用して読み取りを再度有効にするには、以下に示すように、eof
フラグと他のすべての失敗フラグをクリアする必要があります。
cin.clear();
これを行った後、cin
を使用して入力の読み取りをもう一度開始できます!
int main() {
string Word;
while (cin >> Word) {
// do something on the input Word.
if (foo)
break;
}
// perform some other operations.
}
Ctrl-Z(* nixシステムではCtrl-D)を押し、Enterキーを押します。 EOFを送信し、ストリームを無効にします。
cin >> some_variable_or_manipulator
は常にcin
への参照に評価されます。まだ読むべき入力があるかどうかを確認したい場合は、次のようなことを行う必要があります。
int main( ){
string Word;
while (cin.good()){
cin >> Word;
//do sth on the input Word
}
// perform some other operations
}
これにより、ストリームのグッドビットがチェックされます。これは、eofbit、failbit、またはbadbitのいずれも設定されていない場合にtrueに設定されます。読み取りエラーが発生した場合、またはストリームがEOF文字を受信した場合(ファイルの終わりに到達したとき、またはユーザーがCTRL + Dを押したとき)、cin.good()はfalseを返し、ループから抜け出します。
ファイルの最後から飛び出したいと思います。 basic_ios :: eof の値を取得でき、ストリームの最後でtrueを返します。
ファイルから入力を取得します。次に、プログラムが入力の取得を停止すると、whileループが終了することがわかります。実際、cin
は、EOFマーカーが見つかると、入力の取得を停止します。各入力ファイルは、このEOFマーカーで終わります。このEOFマーカーがoperator>>
によって検出されると、内部フラグeofbit
の値がfalseに変更され、その結果、whileループが停止します。
ENTERを押してループを終了するのに役立ちます。
int main() {
string Word;
while(getline(cin,Word) && s.compare("\0") != 0) {
//do sth on the input Word
}
// perform some other operations
}
入力内の特別な単語をチェックできます。 F.e. "やめる":
int main( ){
string Word;
while (cin >> Word){
if(Word == "stop")
break;
//do sth on the input Word
}
// perform some other operations
}