c++中数组定义

来源:百度知道 编辑:UC知道 时间:2024/05/29 03:56:34
#include<iostream>
using namespace std;

int main()
{
int n,i,a,b;
while(cin>>a>>b>>n)
{
if(a==b==n==0) break;
else{
int at[n]={1,1};
for(i=2;i<n;i++)
{
at[i]=(a*at[i-1]+b*at[i-2])%7;
}
cout<<at[n-1]<<endl;
}
}
return 0;
}
编译时出错,variable-sized object "at" may not be initiasized
各位高手,该如何改正?

a==b==n==0
这句话楼上已经有解答!应该是:
a==b && b==n && n==0

另外int at[n]={1,1};这表示at是一个【编译时】未知长度(注意是编译时)数组!所以不能做初始化,达到同样的目的,请把:int at[n]={1,1};

改成

int at[n];
memset(at,0,sizeof(at));//置0
at[0]=at[1]=1;
//注意这里:at[0]=at[1]=1是可以的!等价于:
//at[1]=1; at[0]=at[1];
//参见《运算符及其优先级和结合性》

另外,如果有必要设置运行时长度数组,那么,请使用指针,因为有些编译器不能使用运行时长度数组。

指针用法(以你的为例):

#include<iostream>
using namespace std;

int main()
{
int n,i,a,b;
while(cin>>a>>b>>n)
{
if(a==b==n==0) break;
else{
int *at;
at=new int[n];
memset(at,0,sizeof(int)*n);
at[0]=at[1]=1;
for(i=2;i<n;i++)
{
at[i]=(a*at[i-1]+b*at[i-2])%7;
}
cout<<at[n-1]<<endl;
delete[]at;
}
}
return 0;
}