这是我的代码,我做错了什么?
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
int a[n];
for(int i = 0; i < n; i++) cin >> a[i];
for(int i = 0; i < n-1; i++)
{
for(int j = 1; j < n; j++)
{
if (a[i] > j[i]) cout << a[i] << " ";
}
}
return 0;
}
我得到一个错误:
错误:数组下标的类型无效
int n; cin >> n; int a[n];
这是在创建一个可变长度数组,它不是标准C++,但一些编译器允许它作为非标准扩展。这本身并不是一个错误,但却是需要避免的。当需要动态分配的数组时,请改用std::vector
。
也就是说,你的错误就在这里:
if (a[i] > j[i]) cout << a[i] << " ";
j
是int
,您无法对其进行索引。您需要使用a[j]
而不是j[i]
:
if (a[i] > a[j]) cout << a[i] << " ";
如果初始化数组,int数组的下标必须是一个常量。如果你想使用一个动态数组,你可以像这样使用int指针:
int n;
//Make some changes...
int *buffer=new int[n];
我相信您的问题在main的第3行:int a[n];
对于在c中动态分配数组,您可能想看看这篇文章:如何在c++中动态分配阵列