有没有办法打破C中的上级循环?

时间:2011-11-07 14:04:30

标签: c loops

假设您有两个嵌套的for循环:

int i, j;    // Iterators

for(i=0; i<100; ++i) {
     /* do some stuff */
     ...
     for(j=0; j<99; ++j) {
         /* do more stuff */
         ...
         if( someFunction(j,i) == 2 ) {
             /* break out of both loops */
         }
     }
}

有没有办法(在一个循环中类似于break;命令)在现场结束两个循环?

4 个答案:

答案 0 :(得分:13)

您可以使用goto作为:

int i, j;    // Iterators

for(i=0; i<100; ++i) {
     /* do some stuff */
     ...
     for(j=0; j<99; ++j) {
         /* do more stuff */
         ...
         if( someFunction(j,i) == 2 ) {
             goto done;
         }
     }
}
done:

或使用另一个变量来控制循环迭代:

int i, j;    // Iterators
int done = 0;
for(i=0; i<100 && !done; ++i) {
     /* do some stuff */
     ...
     for(j=0; j<99 && !done; ++j) {
         /* do more stuff */
         ...
         if( someFunction(j,i) == 2 ) {
             done = 1;
         }
     }
}

答案 1 :(得分:5)

我们的好朋友goto可以为您处理!

int i, j;    // Iterators

for(i=0; i<100; ++i) {
     /* do some stuff */
     ...
     for(j=0; j<99; ++j) {
         /* do more stuff */
         ...
         if( someFunction(j,i) == 2 ) {
             /* break out of both loops */
             goto ExitLoopEarly;
         }
     }
}
goto ExitLoopNormal;

ExitLoopEarly:
....

ExitLoopNormal:
...

答案 2 :(得分:4)

这可能是一个解决方案

function void loop()
{
              int i, j;    // Iterators

            for(i=0; i<100; ++i) {
                 /* do some stuff */
                 ...
                 for(j=0; j<99; ++j) {
                     /* do more stuff */
                     ...
                     if( someFunction(j,i) == 2 ) {
                         return;
                     }
                 }
            }
}

答案 3 :(得分:0)

您可以在函数中插入两个循环并使用return

void foo(){
int i, j;    // Iterators

for(i=0; i<100; ++i) {
     /* do some stuff */
     ...
     for(j=0; j<99; ++j) {
         /* do more stuff */
         ...
         if( someFunction(j,i) == 2 ) {
             return;
         }
     }
}
}