请教仅含条件的for循环:for(; A--;)为何不会无限运行?
解释
for(; A--;)循环的工作原理,为什么它不会无限运行? 嗨,我来给你拆解这个看似“奇怪”的循环逻辑——你疑惑它没有显式增量/减量会无限跑,其实A--已经同时承担了条件判断和变量修改的工作,根本不会停不下来。
先回忆下C++里for循环的标准结构:for(初始化语句; 条件判断; 循环后操作),这三个部分都是可以省略的。你看到的for(; A--;)就是省略了初始化和循环后操作,只保留了条件判断部分。
重点就在这个A--上:它是后置递减运算符,执行逻辑分两步:
- 先返回变量
A当前的原始值,用这个值来做循环的条件判断(C++里非0值为真,0为假); - 条件判断完成后,再把
A的值减1。
举个具体例子,假设用户输入的A是3:
- 第一次循环:条件判断用的是
A的原始值3(非0,条件为真),判断完后A变成2,进入循环体打印3个星号; - 第二次循环:条件判断用当前
A的值2(真),判断完后A变成1,进入循环体打印2个星号; - 第三次循环:条件判断用当前
A的值1(真),判断完后A变成0,进入循环体打印1个星号; - 第四次循环:条件判断用当前
A的值0(假),循环直接终止(这时候A会被减到-1,但循环已经停了,不会再执行)。
这样一来,循环会恰好执行A初始值的次数,完全不会无限运行。
再贴一下你给出的完整代码,方便对照:
int main(){ int A, B; cout << "Anna t\x84htien m\x84\x84r\x84: "; //Give ammount of stars: cin >>A; cout << endl; for(; A--;){ for(B = 0; A >= B; B++){ cout << "* "; } cout << endl; } return 0; }
这段代码的效果是打印一个倒三角的星号图案,比如输入3的话,输出就是:
* * * * * *
内容的提问来源于stack exchange,提问作者VortexP
相关产品推荐
相关产品推荐

