C ++数组逻辑问题

时间:2014-06-27 13:59:36

标签: c++

我是C ++的新手,需要一些帮助来理解这个程序的输出:

#include<iostream.h> 

int main(){
     int totalAge = 0;
     int age[10];

     for(int j= 1; j<10; j++){
              age[j] = j;
             cout << age[j] << endl;
     }

     for(int i = 0; i<10; i++){
             totalAge = age[i];
           cout << "Total Age is : " << totalAge << endl;           
     }
     system("pause");
}

命令提示符下的输出为:

1 2 3 4 5 6 7 8 9

Total Age is : 1700868285
Total Age is : 1
Total Age is : 2
Total Age is : 3
Total Age is : 4
Total Age is : 5
Total Age is : 6
Total Age is : 7
Total Age is : 8
Total Age is : 9

Press any key to continue . . .

为什么会显示Total Age is : 1700868285?我认为它应该是Total Age is : 0

4 个答案:

答案 0 :(得分:1)

您永远不会设置age[0]。您的第一个循环从j = 1开始。当你从未设置时,你如何期望编译器神奇地确定你想要age[0] = 0

答案 1 :(得分:1)

//将此处更改为

#include<iostream> 

using namespace std;

int main(){
    int totalAge = 0;
    int age[10];

    //Changed here from 1 to 0
    for(int j= 0 ; j<10; j++){
        age[j] = j;
        cout << age[j] << endl;
    }

    for(int i = 0; i<10; i++){
        totalAge = age[i];
        cout << "Total Age is : " << totalAge << endl;           
    }
}

这是我的结果

0
1
2
3
4
5
6
7
8
9
Total Age is : 0
Total Age is : 1
Total Age is : 2
Total Age is : 3
Total Age is : 4
Total Age is : 5
Total Age is : 6
Total Age is : 7
Total Age is : 8
Total Age is : 9

答案 2 :(得分:0)

你的第一个循环从1开始。因此,数组的第一个阀门包含垃圾值,因为它没有初始化。

您使用从0开始的第二个循环读取并打印未初始化的数组的第一个值。说明导致问题的原因

答案 3 :(得分:0)

目前你循环就是这个

 for(int j= 1; j<10; j++){
          age[j] = j;
         cout << age[j] << endl;
 }

这意味着您已跳过此位置年龄[0],因为从第一次迭代开始j = 1。这就是编译器在那里显示垃圾的原因。 所以你需要做这个改变

 for(int j= 0; j<10; j++){   
          age[j] = j;
         cout << age[j] << endl;
 }

意味着你只需要做j = 0,剩下的事情已经完成了。