#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 函数。
for
将此循环重写为等效循环可能会有所帮助while
:
for(ch=getche(); ch!='q'; ch=getche());
变成
ch = getche();
while (ch != 'q') {
ch = getche();
}
所以你通过调用反复得到一个新字符getche
,直到你得到的字符等于'q'
。
如果没有第二个ch=getche()
,您将只得到一个字符并'q'
一遍又一遍地比较它(如果不是,则会导致无限循环'q'
)。
记住for
循环通常是如何工作的:
for ( init-expressionopt ; test-expressionopt ; update-expressionopt )
statement
init-expression
(如果存在)只评估一次;它(通常)设置我们正在测试的东西。ch
在这种情况下,它通过调用来初始化 的值getche
。
在每次循环迭代之前,test-expression
评估(如果存在);如果为零,则循环退出。在这种情况下,测试是ch != 'q'
。
在每次循环迭代之后,update-expression
评估(如果存在);它更新了我们正在测试的东西。ch
在这种情况下,它通过执行另一个getche
调用来更新 的值。如果没有这一步, 的值ch
不会改变,循环将无限期地执行。
为了清楚起见,重写 for 循环:
for(ch=getche(); ch!='q'; ch=getche());
以下方式:
for(ch=getche(); ch!='q'; )
{
ch=getche();
}
这是第二个 for 循环主体中的语句:
ch=getche();
在第一个 for 循环的第三部分中作为表达式移动。
在 for 循环的第三部分中,可以使用任何表达式,而不仅仅是带有递增或递减运算符的表达式。