回 帖 发 新 帖 刷新版面

主题:希望各位帮我分析这个变长数组的函数

请问各位这个求变长数组的代码错误出在哪里       谢谢各位啦

#include<stdio.h>
double average(int size,int ary[*]);
int main (void)
{
    int size;
    int i;
    double ave;
    printf("how many numbers do you want ");
    scanf("%d",&size);

    int ary[size];
    for(i=0;i<size;i++)
    {
        printf("please enter the next number ");
        scanf("%d",&ary[i]);
        printf("\n");
    }
    ave=average(size,ary);
    printf("the average is %f;",ave);
    return 0;
}
double average(int size,int ary[size])
{
    double sum=0;
    int i;
    for(i=0;i<size;i++)
        sum+=ary[i];
    return(sum/size);
}   //average
编译器错误如下

1>e:\vs2008\c\dingchang shuz\dingchang shuz\定长数组平均值.c(10) : warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>        d:\program files\microsoft visual studio 9.0\vc\include\stdio.h(306) : 参见“scanf”的声明
1>e:\vs2008\c\dingchang shuz\dingchang shuz\定长数组平均值.c(12) : error C2143: 语法错误 : 缺少“;”(在“类型”的前面)
1>e:\vs2008\c\dingchang shuz\dingchang shuz\定长数组平均值.c(16) : error C2065: “ary”: 未声明的标识符
1>e:\vs2008\c\dingchang shuz\dingchang shuz\定长数组平均值.c(16) : error C2109: 下标要求数组或指针类型
1>e:\vs2008\c\dingchang shuz\dingchang shuz\定长数组平均值.c(19) : error C2065: “ary”: 未声明的标识符
1>e:\vs2008\c\dingchang shuz\dingchang shuz\定长数组平均值.c(23) : error C2057: 应输入常量表达式
1>e:\vs2008\c\dingchang shuz\dingchang shuz\定长数组平均值.c(23) : error C2466: 不能分配常量大小为 0 的数组
1>e:\vs2008\c\dingchang shuz\dingchang shuz\定长数组平均值.c(24) : warning C4028: 形参 2 与声明不同
1>生成日志保存在“file://e:\vs2008\c\dingchang shuz\dingchang shuz\Debug\BuildLog.htm”
1>dingchang shuz - 6 个错误,2 个警告

回复列表 (共6个回复)

沙发

代码错误出在哪里
--- 你编译的时候,编译器会告诉你。你不把编译器给出的错误信息贴出来,难道你想让别人用肉眼慢慢看呀?

板凳

首先将代码改正确,比如上面是 double average(int size,int ary),下面却是double average(int size,int ary[size])

#include <stdio.h>
double average( int size, int ary[] );

int main(void)
{
    printf( "%s", "how many numbers do you want " );
    int size;
    scanf( "%d", &size );

    int ary[size];
    for( int i=0; i<size; ++i )
    {
        printf( "%s", "please enter the next number " );
        scanf( "%d", &ary[i] );
        printf( "\n" );
    }
    
    double ave = average( size, ary );
    printf( "the average is %f;", ave );
    
    return 0;
}
double average( int size, int ary[] )
{
    double sum = 0.0;
    for( int i=0; i<size; ++i )
        sum += ary[i];
    return (sum/size);
}

然后,使用支持当今C语言标准的编译器来编译它,这一步很重要,你最大的错误就在于此。你使用了不支持C99的VC2008,这不是很搞笑嘛!!!

我用 gcc4.5(mingw),加上编译参数 -std=c99 编译后,测试无误

3 楼


请问win7下支持什么编译器支持c99标准的     谢谢

4 楼

我用的是vc6.0编译器
数组的大小必须确定下来的,而我感觉你想动态控制数组的大小
我感觉最好的方法是动态分配,当然也可以用宏定义,#define MAXSIZE 5
但是没有动态来的好用
下面是我修改的代码:
//用动态分配内存的方法
#include <stdio.h>
#include <stdlib.h>
double average(int size, int *ary);

int main ()
{
    int size;
    int i;
    double ave;
    int *ary;

    printf("how many numbers do you want ");
    scanf("%d", &size);
    ary = (int *)malloc(sizeof(int) * size);

    for(i = 0; i < size; i ++)
    {
        printf("please enter the next number ");
        scanf("%d", &ary[i]);
        printf("\n");
    }

    ave = average(size, ary);
    printf("the average is %f;",ave);
    printf("\n");
    free(ary);
    system("pause");
    return 0;
}
double average(int size, int *ary)
{
    double sum = 0;
    int i;
    for(i = 0; i < size; i ++)
        sum += ary[i];
    return(sum/size);
}//average

5 楼

[quote]
请问win7下支持什么编译器支持c99标准的     谢谢[/quote]
编译器我用 MinGW32,IDE 我用 CodeLite
CodeLite官网地址:http://codelite.org/

6 楼

谢谢  啊       真棒       请留下你给的QQ好吗     1099827187         谢谢

我来回复

您尚未登录,请登录后再回复。点此登录或注册