[英]Loops and iterator C++
如果循环意味着它应该在 n 处停止,为什么我的代码中的迭代器 (int i) 在末尾等于 n+1?
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;
}
这是编译的示例:
数量:5
[1] = 1
[2] = 2
[3] = 3
[4] = 4
[5] = 5
1 2 3 4 5 0 和 i = 6
程序以退出代码结束:0
问题是为什么 i = 6?
for 循环在语义上等同于(参见cppreference ):
{
init_statement
while ( condition ) {
statement
iteration_expression ;
}
}
在你的情况下,这将是
for (j = 0; j < n; j++){
//...
}
相当于
{
j = 0;
while (j < n) {
// ...
j++;
}
}
要停止循环,条件 ( j<n
) 必须变为false
。 因此,如果您在循环后检查计数器,您将看不到最后一次迭代的计数器,而是未执行的迭代值。 请注意, j++
在最后一次迭代期间递增。
我建议你只在循环范围内声明循环计数器,以避免像当前那样混淆:
for (int j = 0; j < n; j++){
//...
}
似乎原因是此代码片段中的错字
if (j != 500) {
break;
}
出现在外循环中。
我想你的意思
if (j == 500) {
break;
}
否则,外部循环将继续迭代,因为对于 i 的每个值,根据输入在数组 a 中都有一个对应的值。
因为当我变成 6 时,测试 "i <= n" 失败了。因此在循环 i == 6 之后。
循环的条件是“只要 i 小于或等于 n,就执行所有这些操作,并在每一轮后增加 i”。
所以循环检查条件,运行一次,然后增加 i。 在倒数第二轮中,条件为真,代码将运行,然后i
将递增。 在最后一轮,条件不再为真,然后代码没有执行, i
也没有增加,但现在,它已经比你预期的要高
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.