1

ファイルから多数のデータを読み取るプログラムを書いていますが、少しジレンマに陥っています (比較的経験の浅いプログラマーです)。while ループが別の while ループ内に含まれている場合、ループを抜けるために満たす必要のある条件はどれですか? 私の特定の状況を以下に示します(emptyLineFoundは、空の行が見つかったときにtrueに設定されるブール値です)

while(!file.eof()) {
     ....
     while(!emptyLineFound) {
                ....
     }
}

どの条件が優先されますか? コードのそのセクションを離れるには、両方とも満足する必要がありますか? 例えばファイルの最後にあり、行がないので空行が見つからない場合、めちゃくちゃになりますか?

4

5 に答える 5

3

ネストされた while が終了するために、両方のセクションを満たす必要はありません。

 while(!file.eof()) { 

ファイルがストリームの最後にない間、実行を続けます。

 while(!emptyLineFound) { .... } 

空行が見つからない間、実行を続けます。

空行が見つかると、ネストされたループから抜け出し、条件が満たされる (EOF に達する) まで親ループが続行されます。

于 2013-05-02T07:39:01.403 に答える
1
While(ExitCondition)
 {
    // you are at this point if ExitCondition fails .

    while(another-ExitCondition)
      {

         //  you are at this point if another-ExitCondition fails


       }

     // you will come at this point once another-ExitCondition becomes true
  }

    // you will be at this point once  ExitCondition becomes true .
于 2013-05-02T07:43:19.683 に答える
0

おそらく、別の方法で表現すると、コードが明確になります。

void f()
{
    // ...
    while (!file.eof()) {
        // ...
    }
}

int main()
{
    // ...
    while (!emptyLineFound) {
        f();
    }
}

これはプログラムと意味的に同じです。全体的なロジックは同じです。

ここから、f() の呼び出しは f.eof() が true になるまで終了せず、main は emptyLineFound が true になるまで繰り返し f() を呼び出す (したがって「内部」ループを実行する) ことがはっきりとわかります。

于 2013-05-02T08:02:40.373 に答える
0

外側のループが繰り返されるたびに、内側のループが再入力され、新しく開始されます。

于 2013-05-02T07:54:23.267 に答える
0

あなたの質問では、内側のループはemptyLineFoundisのときに終了しますtrue。外側のループは になるまで続きfile.eof()ますtrue。おそらく、内側のループの何かが次のループの前に設定emptyLineFoundされます。false

コードがそこに到達すると条件がテストされることに注意してください。したがって、理論的には次のようなものになる可能性があります。

while(!file.eof())
{
   while(!emptyLineFound) 
   {
       ... do some reading ... 
       if (file.eof())
       {
          ... reset file so we can do more reading ... 
       }
   }
}

file.eof()ループの最初から true の場合を除いて、ループは永遠に続きます。

ところで、一般に!file.eof()、ループ コントロールとして使用するのはかなりお粗末な考えです。読み取り操作自体を使用する方がはるかに優れています。たとえばwhile (file >> var) ...while (!file.eof())余分な反復が発生する傾向があるためfile.eof()、最後まで読み取るまで真ではないためです。

于 2013-05-02T07:44:20.483 に答える