0
#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 函数。

4

3 回答 3

4

for将此循环重写为等效循环可能会有所帮助while

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

变成

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

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

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

于 2021-06-13T10:50:16.947 回答
1

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

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

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

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

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

于 2021-06-13T12:34:36.627 回答
0

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

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

以下方式:

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

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

ch=getche();

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

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

于 2021-06-13T11:00:08.643 回答