我正在尝试将运行时接受的数组中存在的值输出到控制台上。但是当我运行这个程序时,我将数组中的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;
}
答案 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, " "));
答案 1 :(得分:-3)
以下问题我认为你可以解决:
include
。你的代码没有这个。cin.get()
,不确定为什么需要它。我想你可以删除它。即使是最后一个。您可以为最后一个换行符添加cout << endl
。我正在使用Linux。ptr
类似索引:ptr[i]
的数组,如另一个答案中所述。 ptr[i]
相当于*(ptr+i)
。你必须抵消它,否则你会覆盖相同的值(这就是你得到那个结果的原因),因为ptr
指向数组的第一个元素。 P.S。:似乎如果你正在使用Windows(或其他系统),你需要cin.get()
来避免控制台关闭等等。所以也许你需要检查它。见下面的评论。