获取数组输入并打印数组(C++)

问题描述 投票:0回答:4

我正在编写一个代码,该代码采用 10 的数组并收集用户输入。我想在用户将所有值放入其中后打印出数组。问题是,当我打印数组时,它给了我一堆垃圾值和奇怪的输出。我不确定它为什么要做它正在做的事情。

这是我的代码:

#include <iostream>
#include<ctime>

using namespace std;

int main(){

    int num;

    int arr[10] = {0};

    cout<<"Enter 10 numbers: "<< endl;

    for(int i = 0; i < 10; i++){
        cin>>arr[i];

        
    }

    for(int i = 0; i < sizeof(arr); i++){
        cout<<arr[i]<< " ";
    }

return 0;

}
c++ arrays loops input integer
4个回答
2
投票

这是因为您正在运行从 0 到

sizeof(arr)
的循环,这里
sizeof(arr)
表示数组的大小(以字节为单位)。这恰好是数组中元素数量的
sizeof(int)
倍。

因此,如果我们认为

sizeof(int)
为 4 个字节(即每个 int 在内存中占用
4bytes
),并且元素数量为 10,那么它将是 4*10 = 40。因此
for
循环将运行40次。

而是执行以下操作:

#include <iostream>
#include<ctime>

using namespace std;

int main(){

    int num;

    int arr[10];

    cout<<"Enter 10 numbers: "<< endl;

    for(int i = 0; i < (sizeof(arr)/sizeof(arr[0])); i++){
        cin>>arr[i];

        
    }

    for(int i = 0; i < (sizeof(arr)/sizeof(arr[0])); i++){
        cout<<arr[i]<< " ";
    }

return 0;

}

正如@user4581301所指出的,最好让循环在

(sizeof(arr)/sizeof(arr[0]))
处停止接受输入,因为稍后可以更改大小。

我已经更正了。现在就可以了。


1
投票

其他答案中很好地解释了为什么您会获得垃圾值。您可以在此处使用

std::begin
std::end
基于范围的 for 循环 来迭代数组。 C++ 足够聪明,可以为您推断出数组的长度。

int main(){
    int arr[10]{0};

    /* Take inputs from the console and fill the array here. */

    auto start = std::begin(arr);
    auto end = std::end(arr);
    for(; start!=end; ++start)
        std::cout<<*start<<" ";

    // Or using range-based for-loop
    for(auto val: arr)
        std::cout<<val<<" ";
}

1
投票

sizeof(arr)
是数组的总大小(以字节为单位),而不是元素的数量。这可能是 40 而不是 10,因为针对桌面 PC 硬件的典型编译器此时使用 32 位
int

如果您的编译器是最新的并且至少支持 C++17 标准修订版,请使用

std::size
获取数组中的元素数量,但更好的选择(支持回 C++11)是使用基于范围的 for 循环,让编译器为您计算出范围。这会更改
arr
自我管理中的元素数量。

例如:

for(auto & val:arr){
    cin>>val;
}
for(auto & val:arr){
    cout<<arr[i]<< " ";
}

如果基于范围的

for
std::size
不可用,请在使用 10 或
sizeof(arr)
的任何地方定义并使用常量值。

例如:

const int ARR_SIZE = 10;

然后

arr
的定义就变成了

int arr[ARR_SIZE] = {0};

并且两个

for
循环的控制变为

for(int i = 0; i < ARR_SIZE; i++)

这允许您改变

arr
的大小,只需进行一项更改即可使代码正常运行。这也比在需要
sizeof(arr)/sizeof(arr[0])
中元素数量的地方重复
arr
更方便。


0
投票

#包括 #包括

使用命名空间 std;

int main(){

int num;

int arr[10] = {0};

int size = sizeof(arr) / sizeof(arr[0]);

cout<<"Enter 10 numbers: "<< endl;

for(int i = 0; i < 10; i++){
    cin>>arr[i];
}

for(int i = 0; i < size; i++){
    cout<<arr[i]<< " ";
}

返回0;

}

这是正确答案。

© www.soinside.com 2019 - 2024. All rights reserved.