【问题标题】:More than 2 condition in a for loop?for循环中超过2个条件?
【发布时间】:2019-02-09 07:31:16
【问题描述】:

想知道是否有办法在 for 循环中比较 3-4 个条件? 有没有办法只用一个 for 循环来做到这一点,还是我需要在循环中添加一个 if 语句来控制不打印 91 - 96?

我尝试添加一个初始条件,在它们周围加上括号,但似乎无法让它打印超过 90 并在 97 处提取。

for (int cntr = 65; cntr >= 65 && cntr < 91 || cntr > 96 && cntr < 122; cntr++)

for (int cntr = 65;  cntr < 91 || cntr > 96 && cntr < 122; cntr++)

尝试打印 65 到 122 的 ASCII 字符而不显示 90 到 96。 如果可能,正在尝试将所有内容都放在一个 for 循环中。

【问题讨论】:

  • 记住,一旦条件为假,循环就会结束。你需要在循环中有一个if
  • 循环条件是一个终止条件。在它变为假的那一刻,循环终止。你不能有“差距”。
  • 好的,有道理。谢谢
  • 我是这么认为的,但不确定是否有解决办法。非常感谢您为我澄清这一点。
  • 不要使用像 65、90、96 或 122 这样的幻数,没有人知道它们的含义。请改用'a''A''z'

标签: c++ c for-loop


【解决方案1】:

正如其他人指出的那样,中心条件是break 条件。 当您想要在一个循环中完成所有操作时,您不想在到达cntr == 91 时中断。

这是一种在一个循环中巧妙地完成它的方法(C++ 风格):

for (char cntr = 65; cntr < 123; cntr++)
{
    if ( cntr == 91 ) // skips the parts that you don't want
        cntr = 97;

    std::cout << cntr << std::endl;
}

更一般地说,有时您可能在一个循环中有多个真正的中断条件,但最好将它们中的一些/大部分保留在 for 循环的第一行之外,即。 for ( ... ; ... ; ... ),因为它是不必要的,而且通常更难阅读。您可以在循环开始时编写一个中断条件(即第 2 行):

for ( i = 0; break_condition_1; ++i)
{
    if ( break_condition_2 || break_condition_3 )
        break;

    // loop code
}

【讨论】:

    【解决方案2】:

    好的,这样修复它:

    for (int cntr = 65; cntr < 123; cntr++)
        {
            if(!(cntr >= 91 && cntr <= 96))
            cout << "#" << cntr << " = ASCII Char: " << char(cntr) << endl;
        }
    

    猜猜这是目前解决问题的最佳方法。 再次感谢您

    【讨论】:

      【解决方案3】:

      上面/下面的答案很好地解释了如何使用多个 for 循环条件。

      但是假设你正在做这样的事情(正如 Elliott Smith 所建议的那样):

      for ( i = 0; break_condition_1; ++i)
      {
          if ( break_condition_2 || break_condition_3 )
              break;
      
          // loop code
      }
      

      为了清楚起见,最好简单地这样做:

      int i = 0;
      while (break_condition_1 || break_condition_2 || break_condition_3){
         i++;
      }
      

      除了 for 循环在某些情况下编写起来更整洁之外,for 和 while 循环之间没有主要区别。在你的情况下,我会推荐 while 循环。

      【讨论】:

      • while 相当于你的for 循环是while(break_condition_1 &amp;&amp; !(break_condition_2 || break_condition_3))
      猜你喜欢
      • 2018-03-11
      • 2015-09-26
      • 1970-01-01
      • 2021-09-09
      • 2018-07-08
      • 1970-01-01
      • 2016-04-10
      • 2011-09-02
      相关资源
      最近更新 更多