EASY C Max Array Element程序 - >无法找到/理解错误

时间:2013-10-15 21:31:53

标签: c arrays max

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

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; 

}

5 个答案:

答案 0 :(得分: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声明,因为largest中的变量在main中不可见。

发表评论后:

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

int largest(int array, int asize);

在实际功能中也改变它。

答案 1 :(得分:1)

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

  1. 将整个largest函数放在main函数之前。

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

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

    使用函数原型,您可以省略参数的名称,只有类型信息在该阶段很重要,因此函数原型可以缩短为int largest(int *, int);

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

    int largest(int array, int 10)
    

    这简直就是无效的C.

答案 2 :(得分:0)

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

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

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

...

答案 3 :(得分:0)

欢迎来到SO,Mike!

#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()中尽早创建它们,或者如果这是一个库,则将它放在库的入口点。

答案 4 :(得分:0)

largest之前宣布您的main。从其参数中删除ARRAY_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;
}