【问题标题】:How to write a for loop without variable?如何编写没有变量的for循环?
【发布时间】:2019-02-13 13:47:07
【问题描述】:

我想直接写一个for循环,不带任何变量。有可能吗?

例子:

for (1; 1 <= 4; ++) {
  printf ("Loop working\n");
}

预期输出:

Loop working
Loop working
Loop working
Loop working

【问题讨论】:

  • 为什么有人要这样做?除非初始化,否则它将是一个无限循环。当你希望它迭代 4 次以上时,让它知道。
  • 你需要一个变量来保持迭代次数。没有计数就只能无限循环。
  • 实际上想解决什么问题?这可能是XY Problem
  • @WedaPashi -- 这意味着“这样做四次”,不必为必须命名循环控制变量而分心,也许也不会因为某些编译器编写者抱怨您创建了一个变量而分心你从未使用过。

标签: c++ c for-loop increment


【解决方案1】:

你需要一个变量来保持计数,但你可以隐藏它。

#include <stdio.h>

#define JOIN(a, b) (a ## b)
// WARNING: don't LOOP in the same line
#define LOOP(n) for (unsigned JOIN(HIDDEN, __LINE__) = 0; JOIN(HIDDEN, __LINE__) < n; JOIN(HIDDEN, __LINE__)++)

int main(void) {
    LOOP(4) {
        printf("foo");
        LOOP(2) printf(" bar");
        puts("");
    }
    return 0;
}

See code running on ideone

输出

富吧吧
富吧吧
富吧吧
富吧吧

【讨论】:

    【解决方案2】:

    是的,这是可能的。

    for(; ;);
    

    但这将是一个无限循环。添加一个break语句,它只会运行一次

    for(; ; )
        break;
    

    或者你可以在循环中使用增量和条件语句

    int i = 0;
    
    for(; ;){
        printf ("Loop working\n");
        ++i;
        if( i >= 4)
            break;
    }
    

    【讨论】:

    • while(1){}
    • @Stoogy;如果 OP 想在没有任何编译器的情况下编译程序怎么办?
    • @Biswajit 如果你只想循环 4 次,你应该在问题中指定。
    • @Biswajit “如何增加?”增加什么?你没有变量!
    • @Biswajit 不,您没有指定。您提出了一个非常笼统的问题,并提供了一个迭代 4 次的示例。
    【解决方案3】:

    要让循环终止,您需要保持状态,说明您在哪一点。

    通常,您为此使用循环变量。

    您也可以使用递归,在这种情况下,状态编码不同,但仍然需要:

    void loop(int i)
    {
        if (i < 4) {
            printf ("Loop working\n");
            loop(++i); // recursive call
        }
    }
    
    int main()
    {
        loop(0);
    }
    

    【讨论】:

      猜你喜欢
      • 2011-09-08
      • 1970-01-01
      • 1970-01-01
      • 2012-04-04
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多