将10个整数存储到数组C ++

时间:2019-03-09 04:26:05

标签: c++ arrays

好,我很困惑为什么会这样。我要做的就是将输入的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;

    }

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

4 个答案:

答案 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。