好,我很困惑为什么会这样。我要做的就是将输入的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;
}
如果您能告诉我我要去哪里错了,将不胜感激。谢谢!
答案 0 :(得分:4)
从代码的编写方式来看,您只是将用户输入添加到您创建的那个[10]
循环内intArray[]
的{{1}}元素中。此外,任何在for
或之后添加到数组的信息都将超出范围。
我能真正证明我的意思的唯一方法是...
intArray[10]
我注意到的另一件事是您正在for (int i = 0; i < 10; i++)
{
std::cout<<"Enter a number:";
std::cin >> intArray[i];
}
方法中创建另一个具有相同名称的数组。相反,您应该将要填写信息的printData
传递给此方法,并使用它来显示您的信息。
答案 1 :(得分:1)
问题出在这段代码中-
for (int i = 0; i < 10; i++)
{
std::cout << "Enter a number:";
std::cin >> intArray[10];
}
如其他答案和注释中所述,您将所有值存储在数组的第10个内存插槽中。
根据您的评论
我忘了提及,输出只是随机的整数和字符。例如:00B3F724
00B3F724 =>这些是分配给阵列的内存地址,它将保存将要插入的元素。
数组实际如何工作-
float myArray[10];
以上代码片段创建了10个单位的存储空间。单位因数组将容纳的类型而异。在这种情况下,它保持浮点值,因此每个内存空间将为4个字节。所有这些空间都有查找和其他操作的地址。所有这些空格都希望插入浮点值。
在使用循环时,您必须遍历数组(分配给该数组的所有内存插槽),并为每个数组分配一个float元素,而不仅仅是最后一个元素(第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;
}
答案 2 :(得分:0)
如您所知,如果数组声明为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]<<" ";
}
}
答案 3 :(得分:0)
只需更改
std::cin >> intArray[10];
到
std::cin >> intArray[i];
您在做什么错了:
您一次又一次地将值存储在第10个位置(实际上是第11个位置),并且第10个位置的值再次替换为新值,并且第10个位置在数组中不存在,因为索引为数组从0开始,因此您的数组的索引值为0到9。