将 10 个整数存储到数组C++中时出现问题
Problem with storing 10 integers into an array C++
好吧,我很困惑为什么会发生这种情况。我要做的就是将输入中的 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。
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 一个关于在C++中重载布尔运算符的问题
- 首要问题的答案让值班员搞错了
- setlocale的C++土耳其字符串问题
- 如何重构类层次结构以避免菱形问题
- 基于boost的程序的静态链接——zlib问题
- C++格式化输出问题
- 使用mongocxx驱动程序时包含头文件问题