c++程序只列出输入数组的最后一个值
C++ program only lists last value entered into an array
我试图将数组中存在的值输出到控制台上,这些值在运行时被接受。但是当我运行这个程序时,我只得到数组中的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()
来避免控制台关闭。所以也许你需要检查一下。
相关文章:
- 在c++中为double类型的数组创建一个unique_ptr
- 从数组构造一个跨度<shared_ptr<T>><shared_ptr<void>>
- 给定一个单词数组和一个字符串,如何计算给定字符串中的所有单词
- 如何将 v8::FunctionCallbackInfo<v8::Value> 数组从一个隔离复制到另一个隔离?
- 我怎么能有一个以2D数组为参数的函数,而数组有一个我想更改的参数/维度
- 为什么我的数组输出一个不在其中的元素
- 查找数组最后 3 个数字的平均值
- 数组 - 最后一个索引
- 将数组作为一个参数从一个函数传递到C 中的另一个函数
- 从字符串数组创建一个字符数组
- 如何在C 中的小写中将文本从数组的一个维度传递到另一个维度
- 在对结构数组的一个成员进行排序后,移动其成员的其余部分
- 为什么数组在一个文件中打印,但在发送到另一个文件时却缺少数字
- C++,为什么多维数组的一个元素的增加似乎增加了另一个元素
- 将数组的一个元素与整个数组元素进行比较
- 如何将数组从一个函数传递到另一个函数
- C++:通过引用传递对象数组(指向一个?的指针)
- 查找最大和连续子数组-另一个版本
- 如何使用一个整数数组作为一个无序映射的键
- 使用for循环将char数组的一个元素复制到另一个元素