将 10 个整数存储到数组C++中时出现问题

Problem with storing 10 integers into an array C++

本文关键字:问题 C++ 数组 整数 存储      更新时间:2023-10-16

好吧,我很困惑为什么会发生这种情况。我要做的就是将输入中的 10 个整数放入数组中。为什么会这样。

#include <iostream>
using namespace std;
int getData(float intArray[10]);
void printData(float intArray[10]);

int main() {
float myArray[10];
getData(myArray);
printData(myArray);
cin.get();
cin.ignore();

}
int getData(float intArray[]) {
for (int i = 0; i < 10; i++)                                  
{                                                        
std::cout << "Enter a number:";
std::cin >> intArray[10];
}
return 1;
}
void printData(float intArray[10]){
cout << intArray;
}

如果您能告诉我哪里出错了,我们将不胜感激。谢谢!

从代码的编写方式来看,您只是将用户的输入添加到您创建的for循环中intArray[][10]元素中。此外,添加到数组的任何信息都超出intArray[10]范围。

我能真正证明我的意思的唯一方法是...

for (int i = 0; i < 10; i++)
{
std::cout<<"Enter a number:";
std::cin >> intArray[i];
}

我注意到的另一件事是,您正在printData方法中创建另一个同名数组。相反,您应该将要填充信息的intArray传递给此方法,并使用它来显示您的信息。

问题出在这个代码块上——

for (int i = 0; i < 10; i++)                                  
{                                                        
std::cout << "Enter a number:";
std::cin >> intArray[10];
}

如其他答案和注释中所述,您将所有值存储在数组的第 10 个内存插槽中。

根据您的评论

我忘了提,输出只是随机整数和字符。例如:00B3F724

00B3F724=> 这些是分配给数组的内存地址,它将保存将要插入的元素。

阵列的实际工作原理-

float myArray[10];

上面的截图创建了 10 个单位的内存空间。这些单位因数组将容纳的类型而异。在这种情况下,它保存浮点值,因此每个内存空间将为 4 个字节。所有这些空间都有一个用于查找和其他操作的地址。所有这些空格都期望插入浮点值。

当您使用循环时,您必须遍历数组(分配给数组的所有内存插槽)并为每个元素分配一个浮点元素,而不仅仅是最后一个元素(第 10 个)。 实际上,您的 for 循环将成为

for (int i = 0; i < 10; i++)                                  
{                                                        
std::cout << "Enter a number:";
std::cin >> intArray[i];
}

而不是intArray[10]插入这样的值intArray[i].由于我将遍历循环每次迭代的所有槽,因此将值插入槽。

您的代码将如下所示

#include <iostream>
using namespace std;
int getData(float intArray[10]);
void printData(float intArray[10]);
int main() {
float myArray[10];
getData(myArray);
printData(myArray);
cin.get();
cin.ignore();

}
int getData(float intArray[]) {
for (int i = 0; i < 10; i++)                                  
{                                                        
std::cout << "Enter a number:";
std::cin >> intArray[i];
}
return 1;
}
void printData(float intArray[10]){
cout << intArray;
}

如您所知,如果一个数组被声明为 myArray[10],它的索引范围为 0-9。在 myArray[10] 中放置一个值将超出界限并产生垃圾值。

在getData(float intArray[])中,你总是覆盖intArray[10]的内容,而它超出了界限,所以它没有存储在实际的数组中。你应该把你的getData(float intArray[])写成如下:

int getData(float intArray[]) {
for (int i = 0; i < 10; i++)                                  
{                                                        
std::cin >> intArray[i];
}
return 1;
}

同样在printData(float intArray[10])中,你只打印数组的基址(即数组的名称给出了第0个索引的地址)。所以正确的代码是:

void printData(float intArray[])
{
for(int i=0;i<10;i++)
{
cout << intArray[i]<<" ";
}
}

只需更改,

std::cin >> intArray[10];

std::cin >> intArray[i];

你做错了什么:

您一次又一次地将值存储在第 10 个位置(实际上是第 11 个位置),第 10 个位置的值再次替换为新值,并且数组中不存在第 10 个位置,因为数组的索引从 0 开始,因此您的数组的索引值从 0 到 9。