3

我一直在阅读 C++ Primer 的第四版,现在正在进行指针练习。该练习要求编写一个程序来遍历数组并将元素替换为 0。到目前为止,我有这个:

#include <iostream>

using namespace std;

using std::cout;
using std::endl;

int main() {
    int arr[5] = {1, 2, 3, 4, 5};
    for (int i = 0; i != 5; i++)
        arr[i] = 0;
        cout << arr[i] << endl;
}

但我收到一个错误:

name lookup of 'i' changed for ISO 'for' scoping

如何更改元素?

4

4 回答 4

3

你的循环应该是这样的:

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

我也建议你放在 return 0;最后}

于 2012-11-25T19:32:10.537 回答
1
for (int i = 0; i != 5; i++)
    arr[i] = 0;
    cout << arr[i] << endl;

你忘了{}。这意味着行开始cout不是当前循环的一部分,因此i超出了范围。

这个错误有点误导,因为它关注的是很多很多年前这曾经是有效的。

但与其他一些语言不同,块范围是由缩进定义的{}而不是由缩进定义的。因此,写:

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

取得巨大成功。

于 2012-11-25T19:32:09.900 回答
0

好吧,它应该是这样的:记住 5 个元素仅来自数组索引0 to 4

#include <iostream>

using namespace std;

using std::cout;
using std::endl;

int main() {
    int arr[5] = {1, 2, 3, 4, 5};
    for (int i = 0; i < 5; i++){
        arr[i] = 0;
        cout << arr[i] << endl;
    }
}

更改!=to并为循环<添加大括号。for

于 2012-11-25T19:33:40.817 回答
-1

您的 for 循环缺少它的主体。你需要花括号

arr[i] = 0;
cout << arr[i] << endl;

所以编译器知道代码是 for 循环的主体。

于 2020-09-25T20:46:08.267 回答