【问题标题】:Range based for loop incorrectly outputs element of array with cout基于范围的 for 循环错误地输出带有 cout 的数组元素
【发布时间】:2015-05-29 21:26:18
【问题描述】:

以下代码为前两个 for 语句正确输出数组元素,但在第三个代码中,当使用 cout 时,它错误地从基于范围的 for 循环中输出数组元素(第一个与 printf 一起使用)。这是为什么呢?

#include <iostream>
using namespace std;

int main( int argc, char ** argv )
{

int myArray[]={10,20,30,40,50};

for (int i : myArray) {
    printf("%d\n", i);
}


for (int i = 0 ; i < 5; i++) {
    cout << myArray[i] << endl;
}

for (int i : myArray) {
    cout << myArray[i] << endl;
}


return 0;
}

输出:

10
20
30
40
50
10
20
30
40
50
-1707465271
0
1606417258
1606417820
1606418039

【问题讨论】:

    标签: c++ arrays


    【解决方案1】:

    您在

    中有超出范围的访问权限
    for (int i : myArray) {
        cout << myArray[i] << endl;
    }
    

    i 将是 10,20,30,40,50。

    你想要的

    for (int i : myArray) {
        cout << i << endl;
    }
    

    就像你对 printf 所做的那样。

    【讨论】:

    • 啊,现在我明白了,我不是在充当迭代器,而是每个元素的值...
    【解决方案2】:

    按以下方式更改

    for (int i : myArray) {
        cout << i << endl;
    }
    

    这与您之前使用 printf 编写的循环相同

    for (int i : myArray) {
        printf("%d\n", i);
    }
    

    考虑到您应该包含标题&lt;cstdio&gt;

    【讨论】:

      【解决方案3】:

      在使用基于范围的for循环时,您不需要使用索引变量,而是需要一个局部变量来从需要循环的容器或数组中检索数据

      for (int i : myArray) {
          cout << myArray[i] << endl;
      }
      

      上面的sn-p代码应该更正如下:

      for (int i : myArray) {
          cout << i << endl;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-10-31
        • 1970-01-01
        • 2018-12-14
        • 2013-04-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-12
        相关资源
        最近更新 更多