1

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

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

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

于 2013-05-02T07:54:23.267 回答
0

在您的问题中,内部循环将在emptyLineFoundis时结束true。外循环将一直持续到file.eof()is true。大概内部循环中的某些内容设置emptyLineFoundfalse下一个循环之前。

请注意,在代码到达那里时会测试条件,因此,理论上你可以有这样的东西:

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 结尾才正确。

于 2013-05-02T07:44:20.483 回答
0

如果以不同的方式表达,也许代码会变得清晰:

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

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

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

从这里,您可以清楚地看到,在 f.eof() 为真之前,对 f() 的调用不会终止,并且 main 将重复调用 f()(并因此执行“内部”循环),直到 emptyLineFound 为真。

于 2013-05-02T08:02:40.373 回答