我正在编写一个代码,该代码采用 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;
}
这是因为您正在运行从 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]))
处停止接受输入,因为稍后可以更改大小。
我已经更正了。现在就可以了。
其他答案中很好地解释了为什么您会获得垃圾值。您可以在此处使用
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<<" ";
}
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
更方便。
#包括 #包括
使用命名空间 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;
}
这是正确答案。