繁体   English   中英

循环和迭代器 C++

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM