虽然while循环内循环,但两种条件如何工作?

时间:2013-05-02 07:35:51

标签: c++

我正在编写一个涉及从文件中读取大量数据的程序,我遇到了一个两难的境地(成为一个相对缺乏经验的程序员)。如果while循环包含在另一个while循环中,需要满足哪些条件才能离开循环? 我的具体情况如下所示(emptyLineFound是一个布尔值,当找到空行时设置为true)

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

哪个条件优先?他们都必须满意地离开那部分代码吗?例如,如果它在文件的末尾并且由于没有线而找不到空行,那么它会搞砸吗?

5 个答案:

答案 0 :(得分:3)

退出时,嵌套时不必满足这两个部分。

 while(!file.eof()) { 

当文件不在流的末尾时,将继续运行。

 while(!emptyLineFound) { .... } 

在找不到空行时将继续运行。

一旦找到空行,您将退出嵌套循环,父循环将继续,直到满足条件(达到EOF)。

答案 1 :(得分: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 .

答案 2 :(得分:0)

在您的问题中,内部循环将在emptyLineFoundtrue时结束。外部循环将继续,直到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()为真。

顺便说一句,一般来说,使用!file.eof()作为循环控件是一个非常糟糕的主意。使用读取操作本身要好得多,例如while (file >> var) ... - 因为while (!file.eof())往往导致额外的迭代,因为file.eof()在您读完PAST结束之前不是真的。

答案 3 :(得分:0)

每次重复外循环时,内循环都会重新进入并重新开始。

答案 4 :(得分:0)

如果表达不同,代码可能会变得清晰:

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

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

这在语义上与您的程序相同;它具有相同的整体逻辑。

从这里开始,你可以清楚地看到f()的调用在f.eof()为真之前不会终止,而main将重复调用f()(从而执行“内部”循环)直到emptyLineFound是的。