循环在C帮助!

时间:2010-08-13 13:33:51

标签: c for-loop

我的朋友告诉我,存在一个特殊的循环,它不是'while'循环或'do while'循环。

是否有人知道它的名称以及使用它的正确语法?

11 个答案:

答案 0 :(得分:16)

for循环可能吗?

for (i = 0; i < 15; ++i) {
  /* do stuff */
}

答案 1 :(得分:10)

也许是goto循环?这很特别。

start:
       /* do stuff */
       if ( !done ) goto start;

答案 2 :(得分:10)

c中有3种循环。

for循环:http://cprogramminglanguage.net/c-for-loop-statement.aspx

for (initialization_expression;loop_condition;increment_expression){
  // statements
}

while循环:http://cprogramminglanguage.net/c-while-loop-statement.aspx

while (expression) {
  // statements
}

do while循环:http://cprogramminglanguage.net/c-do-while-loop-statement.aspx

do {
  // statements
} while (expression);

你可以使用函数模拟循环:

模拟do while循环:

void loop(int repetitions){
    // statements
    if(repetitions != 0){
        loop(repetitions - 1);
    }
}

模拟while循环:

void loop(int repetitions){
    if(repetitions != 0){
        // statements
        loop(repetitions - 1);
    }
}

答案 3 :(得分:9)

也许是信号处理程序循环?这很特别。

#include <signal.h>

void loop(int signal)
{
    if ( !done ) {
        /* do stuff */
        raise(SIGINT);
    }
}

int main() {
    signal(SIGINT, loop);
    raise(SIGINT);
    return 0;
}

答案 4 :(得分:7)

也许是一个setjmp循环?这很特别。

static jmp_buf buf;

int i = 0;
if ( setjmp(buf) < end ) {
    /* do stuff */
    longjmp(buf, i++);
} 

答案 5 :(得分:6)

for循环,虽然我不知道如何特殊我会考虑它。

答案 6 :(得分:2)

并且不要忘记递归

void doSomething(int i)
{
    if(i > 15)
        return;
    /* do stuff */
    doSomething(i + 1);
}

答案 7 :(得分:0)

你遗漏了for(; true;)循环

答案 8 :(得分:0)

我的回答here可以帮助您了解C for loop 的工作原理

答案 9 :(得分:0)

无限循环?

有(;;){ }

我喜欢这个: - )

答案 10 :(得分:0)

Y combinator循环?这个特别足以成为苹果(现在)。还特别容易在整个地方泄漏记忆

#include <stdio.h>
#include <Block.h>

typedef void * block;
typedef block (^block_fn)(block);
typedef void (^int_fn)(int);

int main(int argc, char ** argv) {
    block_fn Y = ^ block(block f) {
        return ((block_fn) ^ block(block_fn x) {
                return x(x);
            })(^ block(block_fn x) {
                    return ((block_fn)f)(Block_copy(^ block(block y) {
                                return ((block_fn)(x(x)))(y);
                            }));
                });
    };

    int_fn loop = Y(^ block(int_fn f) {
            return Block_copy(^ (int a) {
                    if (a <= 0) {
                        printf("loop done\n");
                    } else {
                        printf("loop %d\n", a);
                        f(a - 1);
                    }
                });
        });
    loop(10);

    return 0;
}