c++程序只列出输入数组的最后一个值

C++ program only lists last value entered into an array

本文关键字:数组 最后一个 输入 程序 c++      更新时间:2023-10-16

我试图将数组中存在的值输出到控制台上,这些值在运行时被接受。但是当我运行这个程序时,我只得到数组中的5个值作为最后一个值。

例如:如果我给0 1 2 3 4作为这个程序的五个值,那么输出显示为4 4 4 4 4

#include "stdafx.h"
#include<iostream>
using namespace std;
int main()
{
  int arrsize = 5;
  int *ptr = new int[arrsize];
  *ptr = 7;
  cout << *ptr << endl;
  cout << "enter 5 values:";
  for (int i = 0; i < arrsize; i++)
  {
    cin >> *ptr;
    cin.get();
  }
  cout << "the values in the array are:n ";
  for (int i = 0; i < arrsize; i++)
  {
    cout << *ptr << " ";
  }
  delete[] ptr;
  cin.get();
  return 0;
}

你的两个循环:

for (int i = 0; i < arrsize; i++)
    ...

循环遍历变量i,该变量在循环中从未使用过。您总是使用*ptr,它总是引用动态分配数组的第一个元素。你应该用ptr[i]代替。


因此,动态分配是一个高级课题。我建议先使用更简单和更常用的东西:

std::cout << "Enter values:";
std::vector<int> array(std::istream_iterator<int>(std::cin), {});
std::cout << "nThe values in the array are:n";
std::copy(begin(array), end(array), std::ostream_iterator<int>(std::cout, " "));

现场演示

我认为你可以解决以下问题:

  • 第一个include我认为可以省略。你的代码没有这个也可以工作。
  • 您使用cin.get(),不确定为什么需要它。我想你可以把它去掉。即使是最后的那个。您可以将cout << endl作为最后一个换行符。我用的是Linux。
  • 在循环中使用ptr,就像在另一个答案中提到的索引为:ptr[i]的数组一样。ptr[i]相当于*(ptr+i)。你必须偏移它,否则你覆盖相同的值(这就是为什么你得到那个结果),因为ptr指向数组的第一个元素。

注:似乎如果你使用的是Windows(或其他系统),你需要cin.get()来避免控制台关闭。所以也许你需要检查一下。