C ++程序仅列出输入到数组中的最后一个值

时间:2015-07-29 16:38:39

标签: c++ arrays

我正在尝试将运行时接受的数组中存在的值输出到控制台上。但是当我运行这个程序时,我将数组中的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;
}

2 个答案:

答案 0 :(得分:1)

你的两个循环:

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, " "));

Live demo

答案 1 :(得分:-3)

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

  • 我认为可以省略第一个include。你的代码没有这个。
  • 您使用cin.get(),不确定为什么需要它。我想你可以删除它。即使是最后一个。您可以为最后一个换行符添加cout << endl。我正在使用Linux。
  • 并在循环中使用ptr类似索引:ptr[i]的数组,如另一个答案中所述。 ptr[i]相当于*(ptr+i)。你必须抵消它,否则你会覆盖相同的值(这就是你得到那个结果的原因),因为ptr指向数组的第一个元素。

P.S。:似乎如果你正在使用Windows(或其他系统),你需要cin.get()来避免控制台关闭等等。所以也许你需要检查它。见下面的评论。