メソッドは何istream::getline
を返しますか?
ファイルをループするのを見たので、次のように実行する必要があります。
while ( file.getline( char*, int ) )
{
// handle input
}
何が返されますか?
操作を連鎖できるように、ストリームを返します。
ただし、ブール コンテキストでオブジェクトを使用する場合、コンパイラは、オブジェクトをブール コンテキストで使用できる型に変換できる変換演算子を探します。
この場合、ストリームにはexplicit operator bool() const
. 呼び出されると、エラー フラグがチェックされます。failbit または badbit が設定されている場合は false を返し、それ以外の場合は true を返します。
この場合、ストリームにはoperator void*() const
. これはポインターになるため、ブール値のコンテキストで使用できます。呼び出されると、エラー フラグがチェックされます。failbit または badbit のいずれかが設定されている場合は、FALSE と同等の NULL を返します。それ以外の場合は、self へのポインターを返します (または、この事実を使用しないでください)。
したがって、ブール値テストが必要なあらゆるコンテキストでストリームを使用できます。
if (stream >> x)
{
}
while(stream)
{
/* do Stuff */
}
注: 外部でストリームをテストしてから、条件付き/ループ ステートメントの本体内で読み書きすることはお勧めできません。これは、読み取りという行為がストリームを悪くする可能性があるためです。通常は、テストの一部として読み取りを実行することをお勧めします。
while(std::getline(steam, line))
{
// The read worked and line is valid.
}
ストリーム自体を返します。ストリームは、その状態void*
を示すように(を介して)変換できます。bool
この例ではwhile
、ストリームの変換bool
が「false」になるとループが終了します。これは、ストリームがエラー状態になったときに発生します。コードでは、ファイルの終わりを超えて読み取ろうとしたときに発生する可能性が最も高くなります。要するに、それはある限り多くを読み、そして停止するでしょう。
この関数は、ストリームオブジェクト自体への参照を返します。これは、さらに読み取り操作を連鎖させるために使用できます。
myStream.getline(...).getline(...);
または、ストリームは暗黙的にvoid *
sに変換可能であるため、ループまたは条件で次のようになります。
while (myStream.getline(...)) {
...
}
これについて詳しくは、cplusplus.comWebサイトを参照してください。
誰もがそれが何であるかを教えてくれましたが、今私に言わせてください、自由形式のバージョンを使用してください
std::string line;
while(getline(file, line)) // assuming file is an instance of istream
{
//
}
なぜこのバージョン?すぐに明らかになるはずです -std::string
固定サイズの文字バッファではなく、文字バッファを渡します!