C语言for循环增量部分为何需再次调用getche函数
C语言for循环增量段getche调用逻辑说明
代码回顾
#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循环固定执行顺序
C语言的for循环执行逻辑严格遵循以下步骤:
- 进入循环时首先执行仅一次的初始化语句
- 执行条件判断:
- 结果为假,直接跳出整个for循环
- 结果为真,执行循环体内容
- 循环体执行完成后,执行增量段的语句
- 跳回第2步重复执行
注意:这段代码的for循环末尾直接跟了分号,代表循环体是空语句,没有任何实际执行逻辑。
对应代码的完整运行流程
对应到你给出的代码,每轮循环的执行逻辑如下:
- 程序启动后第一次走到for循环时,先执行初始化语句
ch=getche():调用getche()读取用户输入的单个字符(不需要按回车,输入的字符会直接回显在屏幕上),将读取结果赋值给变量ch - 执行条件判断
ch!='q':- 如果
ch的值等于q,直接跳出for循环,执行后续的printf语句输出"Found the q" - 如果
ch的值不等于q,由于循环体是空语句,直接进入增量段执行
- 如果
- 增量段执行
ch=getche():再次读取用户新输入的字符,更新ch的取值 - 跳回条件判断步骤,重复检查新的
ch是否为q
增量段重复调用getche的原因
如果删掉增量段的ch=getche(),程序会出现死循环:
第一次读取用户输入后,如果输入的不是q,ch的值会一直停留在第一次输入的非q字符,条件判断ch!='q'永远为真,也没有任何逻辑更新ch的值,程序会永久卡住。
增量段的getche()作用是每次循环都读取用户新的输入,更新ch的取值,保证程序能持续响应用户后续的按键操作,直到用户输入q才退出循环。
内容的提问来源于stack exchange,提问作者Manon Haque
相关产品推荐
相关产品推荐

