C++循环控制变量疑问:为何循环终止后i等于n+1而非n?
问题解析:循环结束后i的值为何为n+1?
原始C++代码
int n, i, j; cout << "N: "; cin >> n; int a[n]; for (int C = 0; C < n; C++){ cout << "a[" << C+1 << "] = "; cin >> a[C]; } for (i = 1; i <= n; i++){ for (j = 0; j < n; j++){ if (a[j] == i) { j = 500; break; } } cout << i << " "; if (j != 500) { break; } } cout << endl; if (i == n+1){ cout << 0 << " and i = " << i << endl; }
编译运行示例
N: 5
a[1] = 1
a[2] = 2
a[3] = 3
a[4] = 4
a[5] = 5
1 2 3 4 5
0 and i = 6
Program ended with exit code: 0
用户疑问
按照循环逻辑,i应在n处停止,为何最终i的值为n+1(示例中为6)?
这事儿本质是for循环的执行流程在起作用,咱们一步步拆解外层循环的步骤就明明白白了:
外层循环的条件是 i <= n,拿示例里n=5的情况来说:
- 一开始i=1,满足
1<=5,执行循环体内容;循环体跑完后,会执行i++,i变成2。 - 重复这个流程:i=2、3、4、5的时候,都满足条件,执行循环体,然后i依次自增到3、4、5、6。
- 当i变成6时,检查条件
6<=5,不满足,外层循环才会彻底终止。
你的代码里,因为数组a包含了1到n的所有数,内层循环每次都能找到匹配值,把j设为500,所以外层循环里的break从来不会触发。这样外层循环就会完整执行完i从1到n的所有迭代,然后执行最后一次i++,让i变成n+1,之后才退出循环。
说白了:for循环的执行顺序是「条件检查 → 执行循环体 → 执行增量操作(i++)」,当最后一次循环体(i=n时)执行完毕,会先做i++,再去检查条件,这时候i已经是n+1了,条件不满足,循环终止,所以最终i的值就是n+1。
如果想让循环结束后i等于n,你可以调整循环条件(比如改成i < n,然后初始i从0开始?不过得对应调整逻辑),或者循环结束后手动i--,但更重要的是吃透for循环的执行流程,这样以后就不会再犯这类迷糊啦。
内容的提问来源于stack exchange,提问作者Rahat Amanturov
相关产品推荐
相关产品推荐

