【问题标题】:How do you Make A Repeat-Until Loop in C++?如何在 C++ 中创建重复直到循环?
【发布时间】:2010-11-07 19:30:09
【问题描述】:

如何在 C++ 中创建重复直到循环?与标准的 While 或 For 循环相反。我需要在每次迭代结束时检查条件,而不是在开始时。

【问题讨论】:

    标签: c++ loops for-loop while-loop


    【解决方案1】:
    do
    {
      //  whatever
    } while ( !condition );
    

    【讨论】:

    • 呃...这很可悲。埃米尔比我早点提交......“接受”应该给他......
    • 你的rep少了,这是一个非常简单的问题,所以我很乐意给你。 :)
    • 正如 jalf 所说:如果你想要一个 do until 循环而不是 do while 循环,你将不得不否定条件。
    • 非常感谢你们的帮助,你们!所以是最好的!
    • 答案中的代码看起来不像 C++ 代码。仅当 nullPlanet 类型的实例时。
    【解决方案2】:

    当您想在循环开始时检查条件时,只需在标准 while 循环上否定条件即可:

    while(!cond) { ... }
    

    如果最后需要它,请使用 do ... while 循环并否定条件:

    do { ... } while(!cond);
    

    【讨论】:

      【解决方案3】:

      您可以使用宏来模拟重复直到语法。

      #define repeat do
      #define until(exp) while(!(exp))
      

      【讨论】:

      • 这正是我想要的。不确定“exp”是如何工作的。它是通用通配符吗?谢谢!
      • @Ace.C 这是一个参数名称。第二个#define 是一个宏,它的作用有点像一个函数。因此,在这种情况下,#define until(exp) 是一个名为 until 的宏,它接受一个参数 exp,并扩展为 while(!(exp))
      • 谢谢@Conor.O,有没有关于这个主题的文章或其他帖子可以链接到我?我很难找到关于如何制作这些宏的好资源
      • 请不要使用预处理器来定义您自己的语言 - 除非您真的希望每个必须维护您的代码的同事都仇恨。
      【解决方案4】:

      例如,如果您希望循环在对组中的所有人进行计数后停止。我们将认为值 X 等于组中的人数,并且计数器将用于对组中的所有人进行计数。要写

      while(!condition)

      代码将是:

      int x = 人;

      int 计数器 = 0;

      while(x != 计数器)

      {

      计数器++;

      }

      返回 0;

      【讨论】:

        【解决方案5】:

        只需使用:

        do
        {
          //enter code here
        } while ( !condition );
        

        所以它的作用是将“检查条件”部分移到末尾,因为 while 位于末尾。所以它只在运行代码后检查条件,就像你想要的那样

        【讨论】:

          【解决方案6】:

          Repeat 应该是一个简单的循环 n 次循环...循环的无条件版本。

          #define repeat(n) for (int i = 0; i < n; i++) 
          
          repeat(10) {
              //do stuff
          }
          

          您还可以添加一个额外的 barce 以进一步隔离 i 变量

          #define repeat(n) { for (int i = 0; i < n; i++) 
          #define endrepeat }
          
          repeat(10) {
              //do stuff
          } endrepeat;
          

          [编辑] 有人发布了关于传递值以外的其他内容(例如表达式)的担忧。只需更改为循环向后运行,导致表达式仅计算一次

          #define repeat(n) { for (int i = (n); i > 0; --i)
          

          【讨论】:

          • 宏几乎总是一个坏主意。在这里,想象一下如果向宏传递一个复杂的表达式会发生什么。
          • 只需更改循环并完成 for (int i = n; i >0 ; i--)
          【解决方案7】:

          这个也可以

              int repeat;
              repeat = 0;
              //to repeat once
              do  {
                 ....
                 repeat + 1;
              } while(repeat < 1);
          

          这当然是假设您只想重复一次,因此您可以更改重复的值,而不是从while(); 条件的可变数量增加的数量。此代码适用于 C++ 17,但我不确定是否适用于其他版本。

          【讨论】:

          • 看来你的答案很接近接受的答案,所以这就是发布它的意义所在?
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-09-18
          • 2013-01-10
          • 1970-01-01
          • 1970-01-01
          • 2011-11-24
          相关资源
          最近更新 更多