求各位编程高手帮忙解答,帮我看看哪里错了,该怎么改正
C语言的数组是静态分配的,即在程序运行前就要分配好。因此C语言不允许使用 int a[n];这样的定义,因为n是未知的,C语言的数组定义中,元素个数必须是“常量表达式”,这点你要注意了。
如果你非要进行动态分配,可以使用指针,即:
int *a;
scanf("%d",&n);
a=(int*)malloc(n*sizeof(int)); //如果是C++环境,可以简化为a=new int[n];
如果是C++环境,你程序中的前三行顺序是可以的,但是如果是标准C(如TC)的话,函数的变量定义只能在第一行执行代码之前定义,如:
int n,i,j;
int *a;
scanf("%d",&n);
a=(int*)malloc(n*sizeof(int));
在标准C下,这样的定义是错误的:
int n,i,j;
scanf("%d",&n);
int *a; //不符合变量定义规则
a=(int*)malloc(n*sizeof(int));
如果要用动态分配,你的程序最前面应该加上一行头文件包含:
#include <malloc.h>
你的程序中的代码过于繁琐了,可以使用C的“往下掉”的特点,使程序变得简单:
switch(j)
{
case 0:case 1:case 2:case 3:case 4:case 5:printf("E");break;
case 6:printf("D");break;
...
case 9:case 10: printf("A");break;
defalut:printf("ERROR SCORE SCOPE!");
}
#include<stdio.h>
#include<malloc.h>
void main()
{ int n,i,j,*a;
scanf("%d",&n);
a=(int *)malloc(sizeof(int)*n); //申请数组内存
if ( a ) //如果申请成功
{ for ( i=0;i<n;i++ )
{ scanf("%d",a+i);
j=a[i]/10;
switch ( j )
{
case 0:
case 1:
case 2:
case 3:
case 4:
case 5: printf("E"); break;
case 6: printf("D"); break;
case 7: printf("C"); break;
case 8: printf("B"); break;
case 9:
case 10: printf("A"); break;
}
}
free(a); //释放申请的内存
}
}
其中的判断也可以用条件来写:
在程序开始定义个字符变量c
c='E';
if ( a[i]>=90 ) c='A';
else if ( a[i]>=80 ) c='B';
else if ( a[i]>=70 ) c='C';
else if ( a[i]>=60 ) c='D';
printf("%c",c);
可以了,谢谢了
这里有问题,楼主你不能用一个变量来声明数组的长度。
你应该用一个常量或者像下面这样做:
int *a = new int[n];
这样子还是有问题,而且我这样写是跟书上一样的
编译器的提示信息有什么?
我看到的只有把main前面的void改成int
不行,调试还是出现错误