我编写了这个程序,它以整数数组的形式查找最大元素的索引。出于某种原因,我在尝试编译时遇到以下错误。关于我的代码有什么问题的任何想法?我似乎找不到任何东西。
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;
}
答案 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)需要在调用之前了解函数。有两种方法可以做到这一点:
将整个largest
函数放在main
函数之前。
int largest(int *array, int size)
{
// ...
}
int main(int argc, char *argv[])
{
// ...
}
在main
函数之前放置一个函数 prototype 。原型本质上是函数返回类型,名称和参数列表的副本,例如:
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.
答案 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
功能中声明index
和largest
。
一些修复后的代码:
// 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;
}