在代码1中,数组运行时初始化工作正常,但在代码2中,尽管两个代码几乎相同,但情况并非如此
代码1:
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
int A[n][n],i,j;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
scanf("%d",&A[i][j]);
}
int sum=0, newsum=0;
for(i=0;i<n;i++)
{
newsum = 0;
for(j=0;j<n;j++)
{
newsum = newsum + A[i][j];
}
if(sum < newsum)
{
sum = newsum;
}
}
return 0;
}代码2:
#include<stdio.h>
int main()
{
int dim,i,j,k,h=0;
scanf("%d",k);
int array[k][k];
int max[2k+2]={0};
for(i=0;i<k;i++)
{
for(j=0;j<k;j++)
{
scanf("%d",&array[i][j]);
}
}
//rows
h=max[0];
for(i=0;i<k;i++)
{
for(j=0;j<k;j++)
{
max[i]+=array[i][j];
}
if(max[i]>=h)
{
h=max[i];
}
}
//columns
for(j=0;j<k;j++)
{
for(i=0;i<k;i++)
{
max[j+k]+=array[i][j];
}
if(max[j+k]>=h)
{
h=max[j+k];
}
}
//diagonal_1
for(i,j=0;j<k && i<k;j++,i++)
{
max[2k]+=array[i][j];
}
for(i=0,j=k-1;j>=0&&i<k;j--,i++)
{
max[2k+1]+=array[i][j];
}
if(max[2k]>=max[2k+1])
max[2k]=max[2k];
else
max[2k]=max[2k+1];
if(max[2k]>=h)
printf("%d",max[2k]);
else
printf("%d",h);
return 0;
} 发生的错误包括:
Program: In function 'main':
Program:11:9: error: fixed-point types not supported for this target
Program:48:6: warning: left-hand operand of comma expression has no effect[-
Program:50:13: error: fixed-point types not supported for this target
Program:54:9: error: fixed-point types not supported for this target
Program:56:8: error: fixed-point types not supported for this target
Program:56:17: error: fixed-point types not supported for this target
Program:57:5: error: fixed-point types not supported for this target
Program:57:13: error: fixed-point types not supported for this target
Program:59:5: error: fixed-point types not supported for this target
Program:59:13: error: fixed-point types not supported for this target
Program:61:8: error: fixed-point types not supported for this target
Program:62:17: error: fixed-point types not supported for this target
Program:11:5: warning: unused variable 'max' [-Wunused-variable]发布于 2014-03-26 20:48:39
你不能使用像int max2k+2={0}这样的变量来声明数组,因为数组的大小必须在编译期间确定。
发布于 2014-03-26 20:41:04
1.
int max[2k+2]={0};你不能在C中使用2k,就像在数学中一样,这是无效的。您需要使用2*k。在你的代码中的多个地方也出现了同样的问题。
而C11,6.7.9明确指出,VLA不能有初始化器。
要初始化的实体的类型应为未知大小的数组或不是可变长度数组类型的对象类型。
所以你必须删除可变长度数组的初始值设定项。
2.
您的第一个scanf()缺少&。
变化
scanf("%d",k); 至
scanf("%d",&k);3.
for(i,j=0;j<k && i<k;j++,i++) 在这里,初始化部分的i什么也不做。你可能打算用1来初始化它。
https://stackoverflow.com/questions/22660809
复制相似问题