【问题标题】:I can't understand the increment portions of for loops in c language for specific problem对于特定问题,我无法理解 c 语言中 for 循环的增量部分
【发布时间】:2021-08-29 14:21:18
【问题描述】:
#include <stdio.h>
#include <conio.h>

int main(void)
{
    char ch;
    for(ch=getche(); ch!='q'; ch=getche());
    printf("Found the q");
    return 0;
}

我不明白这里的 for 循环是如何工作的。我可以理解初始化和条件测试。但不明白为什么我必须在增量部分再次使用 getche 函数。

【问题讨论】:

  • ch 会有什么变化?
  • 附带说明:如果将for 循环更改为do...while 循环,则只需编写getche 一次而不是两次:@987654326 @

标签: c for-loop increment conio


【解决方案1】:

为了清楚起见重写for循环:

for(ch=getche(); ch!='q'; ch=getche());

以下方式:

for(ch=getche(); ch!='q'; )
{
    ch=getche();
}

这是第二个for循环体中的语句:

ch=getche();

在第一个 for 循环的第三部分中作为表达式移动。

在 for 循环的第三部分中,可以使用任何表达式,而不仅仅是带有递增或递减运算符的表达式。

【讨论】:

    【解决方案2】:

    请记住 for 循环通常是如何工作的:

    for ( init-expressionopt ; test-expressionopt ; update-expressionopt )
      statement
    

    init-expression(如果存在)只计算一次;它(通常)设置了我们正在测试的东西。在这种情况下,它通过调用getche来初始化ch的值。

    在每次循环迭代之前,评估test-expression(如果存在);如果为零,则循环退出。在这种情况下,测试是ch != 'q'

    每次循环迭代后,评估update-expression(如果存在);它更新了我们正在测试的东西。在这种情况下,它通过执行另一个getche 调用来更新ch 的值。如果没有这一步,ch 的值不会改变,循环会无限执行。

    【讨论】:

      【解决方案3】:

      将这个 for 循环重写为等效的 while 循环可能会有所帮助:

      for(ch=getche(); ch!='q'; ch=getche());
      

      变成

      ch = getche();
      while (ch != 'q') {
          ch = getche();
      }
      

      所以你反复调用getche获取一个新字符,直到你得到的字符等于'q'

      如果没有第二个ch=getche(),您将只会得到一个字符,并一遍又一遍地将其与'q' 进行比较(如果不是'q',则会导致无限循环)。

      【讨论】:

        猜你喜欢
        • 2019-03-24
        • 1970-01-01
        • 2022-07-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-08
        • 1970-01-01
        • 2012-07-18
        相关资源
        最近更新 更多