【问题标题】:"error: expected ';', ',' or ')' before numeric constant" is coming up to my code“错误:预期的';',','或')'在数字常量之前”出现在我的代码中
【发布时间】:2016-02-22 01:42:16
【问题描述】:

该程序是关于函数平均的。我收到一个错误:

错误:数字常量前应有 ';'、',' 或 ')

每当我构建它时,它都在 avg_array() 函数中。帮助将不胜感激,谢谢!

#include <stdio.h>      
#define SIZE 5

// Prototypes
int avg_array (int*, int);          

main()
{
    int values[SIZE];
    int avg;
    int i;

    printf("Enter 5 numbers please. \n");

    for(i=0; i<SIZE; i++)
    {   
        scanf("%d", &values[i]);
    }

    avg = avg_array(values, SIZE);
    printf("\n The avg of the array is %d \n", avg);

    getchar();
    getchar();
} // end main()


/* Implement avg_array() WHERE THE ERROR PERTAINS */
avg_array(int my_array[], int SIZE)
{
    int sum;
    int i;
    int fxn_average;

    for(i=0; i<SIZE; i++)
    {
        sum = sum + my_array[i];
    }

    fxn_average = (sum/SIZE);

    return (fxn_average);
}

【问题讨论】:

  • 您在哪一行遇到了该错误?
  • 看起来他试图把** **放在麻烦的部分周围(好像用SO的格式加粗)。

标签: c function average


【解决方案1】:

您正在使用标识符 SIZE 作为参数。这也是一个由预处理器转换为5 的宏。预处理器应用宏后,它看起来像

avg_array (int my_array[], int 5)

由于5 是数字常量而不是标识符,因此会产生错误。更改变量名。

看起来您还有一个缺少返回类型的函数签名,它应该与上面声明的原型相匹配。试试这个:

int avg_array (int *my_array, int size)
{
    int sum = 0;
    int i;

    for(i=0; i<size; i++)
    {
       sum = sum + my_array[i];
    }
    return sum/size;
}

变量sum应初始化为0。不需要局部变量fxn_average,因为您可以在末尾只使用return sum/size;


我将第一个参数的类型从 int[]int 的数组)更改为 int *(指向 int 的指针),因此函数 定义 与问题。该函数被声明为

int avg_array (int*, int);

这些参数没有标识符;仅指定了它们的类型。这是有效的 C,但许多风格指南都反对它,因为命名参数有助于读者理解含义或意图。例如,如果您正在编写一个编程接口,程序员可能看到的只是头文件中的函数原型。必须清楚参数是什么才能编写正确的函数调用。无论如何,添加标识符看起来像:

int avg_array (int *my_array, int size);

这与我上面使用的定义相同。

【讨论】:

  • 非常感谢!但是有一个问题,当我已经在“int*”中的指针之后声明了间接运算符时,为什么在“my_array”之前会有一个星号?你是救生员!
  • 我添加了一些可能会回答您的问题的内容,但我不太明白。 “在'int *'中的指针之后声明间接运算符”是什么意思? int *my_array 中有星号是因为 int * 是指向 int 的指针。
  • 对不起,我还是编程新手。再次感谢您添加更多信息,但我已经了解了代码的工作原理。我只是有点好奇为什么在代码int *MY_ARRAY 之前的指针上有一个星号,而在代码int avg_array (INT*, int); 之后的指针上有一个星号。 (指针在大写上)
  • int *p 等价于int* pp 都是指向int 的指针)。你把空间放在哪里并不重要。你也可以写没有空格int*xint *p 风格更常见。另请参阅this question
  • 哦,现在我明白了!你是天使!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-16
  • 1970-01-01
  • 2021-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多