2

例:

std::ifstream in("some_file.txt");
std::string line; // must be outside ?
while(getline(in,line)){
  // how to make 'line' only available inside of 'while' ?
}

Do-while ループは、最初の反復では機能しません。

std::ifstream in("some_fule.txt");

do{
  std::string line;
  // line will be empty on first iteration
}while(getline(in,line));

もちろん、いつでも a を持つことができますが、if(line.empty()) getline(...)それは実際には正しくありません。コンマ演算子を悪用することも考えました:

while(string line, getline(in,line)){
}

しかし、それは機能しません.MSVCは、lineブール値に変換できないためだと言っています. 通常、次のシーケンス

statement-1, statement-2, statement-3

タイプでなければなりtype-of statement-3ません (オーバーロードoperator,は考慮されません)。なぜそれが機能しないのかわかりません。何か案は?

4

3 に答える 3

6

少しごまかして、余計なブロックを作ることもできます:

{
    std::string line;
    while (getline(in, line)) {
    }
}

これは技術的には「同じスコープ」ではありませんが、外側のブロックに他に何もない限り、同等です。

于 2011-06-06T02:00:52.923 に答える
3

for ループが機能します。私はこれを常に行っています。

for (std::string line;
     getline(in,line); )
{
}
于 2011-06-06T02:17:26.910 に答える
2

forループを使用できます:

for(std::string line; getline(in, line);) {

}

でも、スタイルはあまり良くないと思います。

于 2011-06-06T02:18:52.823 に答える