【发布时间】:2021-07-17 00:18:21
【问题描述】:
这是作业:
您的目标是编写一个程序,以相反的顺序显示来自输入的一系列整数。您的 程序将提示用户输入此列表中的值的数量,它将用作动态的大小 在此提示后声明的数组。
数组size未知,value是指针,sub必须在循环前赋值。
以下是步骤:
- 声明变量,但不要“为指针分配内存”。在提示用户输入值后执行此操作。
- 提示用户输入要列出的值的数量。 (如果用户输入否定数字,则必须向用户发送消息)。然后使用关键字
new作为指针。 - 提示用户输入值
- 反向显示值。
- 对动态数组使用关键字
delete。
当我试图运行程序时,错误是:
错误:ISO C++ 禁止比较指针和整数 [-fpermissive]
for(int sub = 0; sub < size; size--)
--------------------------------------------------^
错误:需要左值作为减量操作数for (int sub = 0; sub > size; size--)
-------------------------------------------------- ----^
另外,我不确定关键字new 的作用。
#include <iostream>
using namespace std;
int main()
{
int size, array;
cout << "How many values would you like to enter? ";
cin >> array;
int value;
int *array = new int[size];
if (size > 0)
{
for (int sub = 0; sub < size; size++)
{
cout << "Enter value #" << size << ": ";
cin >> value;
}
while (size > 0);
}
else
{
while (size < 0)
{
cout << "Size must be positive." << endl;
cout << "How many values would you like to enter? ";
cin >> size;
}
}
cout << "Here are the values you entered in reverse order: \n";
for (int sub = size - 1; sub >= 0; size--)
{
cout << "Value #" << size << " :" << value << endl;
}
delete[] array;
return 0;
}
PS:我知道size 应该是未知的,但我遇到了另一个错误提示
“size”的存储大小未知
所以,我添加数字以避免该错误。
编辑:所以感谢@MikeCAT,我更改了代码,但这个错误说terminate called after throwing an instance of 'std::bad_array_new_length what(): std::bad_array_new_length。这是因为我为size 输入了一个负 数字,而这应该发生在if 语句中。另外,在用户输入他们要输入的值后,我需要 size 从 1 开始,但 size 始终从输入的数字开始。
【问题讨论】:
-
size[10]超出了 9 元素size的范围。考虑使用std::vector。 -
@MikeCAT 我不认为这是一个选项,因为需要动态分配的数组(
size不严格符合这是另一个问题,但这是题外话) -
对于
new,您可以查看:en.cppreference.com/w/cpp/language/new。它有点重,但它应该很好地了解动态分配的数组/内存在c++中的工作方式 -
storage size of 'size' is unknown: 你不能在堆栈上(即在函数中本地)有变量,其大小在编译时是未知的。一些编译器允许它,但它不是标准的c++。再次这样做你需要new。new int[size],做了几件事。为size数量的ints 分配内存。返回指向分配内存开始的指针(确保对齐正确,初始化一些时间等)。此内存未释放。为此,您需要delete -
所以感谢@MikeCAT更改代码,但是这个错误说
terminate called after throwing an instance of 'std::bad_array_new_length what(): std::bad_array_new_length。