【发布时间】:2021-05-12 09:17:54
【问题描述】:
所以我在 C++ 中有这个代码,其中我有一个未定义的初始值的数组,并且用户应该继续输入数组的值,直到退出代码 -1。一旦输入,数组大小由输入的数量决定。然后它必须被分成两半成两个数组,第一个具有原始数组的前半部分,第二个具有原始数组的后半部分。
#include <iostream>
using namespace std;
int main()
{
int n;
n++;
int a[n];
for (int i = 0; i < n; i++)
{
cin >> a[i];
n++;
if (a[i] == -1)
{
n--;
break;
}
}
cout << n << endl;
int e[n / 2];
for (int j = 0; j < (n / 2); j++)
{
e[j] = a[j];
}
int q = 0;
int o[n / 2];
for (int l = (n / 2); l < n; l++)
{
o[q] = a[l];
q++;
}
for (int h = 0; h < n / 2; h++)
{
cout << e[h] << " ";
}
cout << '\n';
for (int h = 0; h < n / 2; h++)
{
cout << o[h] << " ";
}
return 0;
}
我面临的问题是,当数组大小为 4 时,它工作正常,但当它的大小为 6 时,第 5 和第 6 个值变为 3 0 。而不是我输入的值。制作更大的数组也有类似的问题,数组中的某些值被损坏。
【问题讨论】:
-
int a[n];不是标准 c++,请改用std::vector。 Why aren't variable-length arrays part of the C++ standard? -
@largest_prime_is_463035818,这是否意味着 OP 正在编译一些选项以使其正常工作?
-
@Enlico gcc 需要通过
-pedantic进行一些推送以禁用扩展。我的意思是使用扩展很好,只要知道它是一个扩展并且代码是不可移植的。虽然,经常被忽略和误解,这里既不需要 VLA,也不是正确的工具(一些“教程”推广它们,我不知道为什么) -
谢谢!我很高兴很久以前没有看到这样的东西:D