0

我编写了这个程序,它在整数数组中找到最大元素的索引。由于某种原因,当我尝试编译它时出现以下错误。关于我的代码有什么问题的任何想法?我似乎找不到任何东西。

part1.c:9: error: expected ‘;’, ‘,’ or ‘)’ before numeric constant

part1.c: In function ‘main’:

part1.c:13: warning: implicit declaration of function ‘largest’

part1.c: At top level:

part1.c:20: error: expected ‘;’, ‘,’ or ‘)’ before numeric constant
make: *** [part1] Error 1

我的代码:

// Program that finds the largest element in an array of integers 

#include <stdio.h>

// Main body
// Create and initialise a one-dimensional array of integers

#define ARRAY_SIZE 10
int largest(int array, int ARRAY_SIZE);
int main(int argc, char** argv)
{
  int array [ARRAY_SIZE] = { 5, 1, 2, 8, 12, 9, 0, 4, 52, 91 };
  int maxIndex = largest(array, ARRAY_SIZE);
  printf("%d", maxIndex);
}

// largest - function
// takes (array,length) -> returns the index of the largest element in the array

int largest(int array, int ARRAY_SIZE)
{
   int maxIndex;

   for(int index = 0; index < 10; index++)
   {
     if array[i] > array[i+1]
     i = maxIndex;  
   }

   return maxIndex; 

}
4

5 回答 5

3

问题是您的代码不在任何函数中。我认为你只需要一个main

int main(int argc, char** argv)
{
    int array [ARRAY_SIZE] = { 5, 1, 2, 8, 12, 9, 0, 4, 52, 91 };
    int maxIndex;
    maxIndex = largest(array, ARRAY_SIZE);
    printf("%d", maxIndex);
}

maxIndex我还在函数内部添加了一个声明main,因为 in 中的变量largest不会从main.

在您发表评论后:

您现在的问题是预处理器ARRAY_SIZE正在更改为10。将您的声明更改largest为:

int largest(int array, int asize);

也可以在下面的实际功能中更改它。

于 2013-10-15T21:34:19.937 回答
1

C(尤其是 C99)需要在调用函数之前了解它们。有两种方法可以做到这一点:

  1. 把你的整个largest函数放在函数之前main

    int largest(int *array, int size)
    {
        // ...
    }
    
    int main(int argc, char *argv[])
    {
        // ...
    }
    
  2. 在函数之前放置一个函数原型main。原型本质上是函数的返回类型、名称和参数列表的副本,例如:

    int largest(int *array, int size);
    
    int main(int argc, char *argv[])
    {
        // ...
    }
    
    int largest(int *array, int size)
    {
        // ...
    }
    

    使用函数原型,你可以省略参数的名称,只有类型信息在那个阶段很重要,所以函数原型可以缩短为int largest(int *, int);.

请注意,我更改了有关您的largest功能的两件事。第一个参数的类型现在是指针类型。当将数组作为参数传递给函数时,这是必要的,本质上是给函数一个数组第一个元素的地址。我还将第二个参数重命名为size,因为ARRAY_SIZE它是一个扩展为 的宏10,所以编译器看到了这个:

int largest(int array, int 10)

那简直是无效的C。

于 2013-10-15T22:08:45.660 回答
0
largest(array, ARRAY_SIZE);
printf("%d", maxIndex);

这可能是个问题..你的意思是说

int maxIndex = largest(array, ARRAY_SIZE);
printf("%d", maxIndex);

??

于 2013-10-15T21:35:20.890 回答
0

欢迎来到 SO,迈克!

#define ARRAY_SIZE 10

int array [ARRAY_SIZE] = { 5, 1, 2, 8, 12, 9, 0, 4, 52, 91 };
largest(array, ARRAY_SIZE);
printf("%d", maxIndex);

// largest - function

这些操作,largest()调用和printf()调用——它们不能在这里发生。它们不是合法的语法。必须在现有函数的声明中调用函数。

考虑将它们移动到应该调用它们的函数的范围内——如果在启动时,您可以在早期创建它们main(),或者如果这是一个库,则将其放在库的入口点。

于 2013-10-15T21:36:00.050 回答
0

声明你的largest之前mainARRAY_SIZE从它的论点中删除;您定义ARRAY_SIZE为常量,因此您不能在函数声明中将其用作参数。
而且由于您将数组名称传递给它并且它将衰减为指向其第一个元素的指针,因此您应该将其声明为

int largest(int *array, int n);

main在您的程序主体之前需要 一个函数。

int main(int argc, char** argv)
{
     int array [ARRAY_SIZE] = { 5, 1, 2, 8, 12, 9, 0, 4, 52, 91 };
     int maxIndex;
     maxIndex = largest(array, ARRAY_SIZE);
     printf("%d", maxIndex);
}  

你也应该在你的函数中声明i和。 您的代码经过一些修复: indexlargest

 // Program that finds the largest element in an array of integers

#include <stdio.h>
#define ARRAY_SIZE 10
// Main body
// Create and initialise a one-dimensional array of integers



int largest(int* array, int n);
int main()
{
     int array [ARRAY_SIZE] = { 5, 1, 2, 8, 12, 9, 0, 4, 52, 91 };
     int maxIndex ;
     maxIndex = largest(array, ARRAY_SIZE);
     printf("%d", maxIndex);
}
// largest - function
// takes (array,length) -> returns the index of the largest element in the array

int largest(int* array, int n)
{
    int maxIndex = 0;
    int max = array[0];

    for(int index = 1; index < n; index++)
    {
        if (max < array[index])
        {
            maxIndex = index;
            max = array[index];
        }

    }

    return maxIndex;
}
于 2013-10-15T21:44:29.480 回答