2

我刚开始研究 C 中的函数,这阻止了我。我想编写一个在元素向量中搜索元素的函数SIZE。这是代码:

#include <stdio.h>
#define SIZE 10

int find(int vet[], int SIZE, int elem);

int main()
{
    int vett[SIZE] = {1, 59, 16, 0, 7, 32, 78, 90, 83, 14};
    int elem;

    printf ("Imput the element to find: ");
    scanf  ("%d", &elem);

    find(vett[SIZE], SIZE, elem);

    if (find == 1)
        printf ("\nI find the element!");
    else if (find == 2)
        printf ("\nI did not find the element!");

    return 0;
}

int find(int vett[], int SIZE, int elem)
{
    int i;
    int flag = 0;

    for (i = 0; i < SIZE; i++)
        if (vett[i] == elem)
            flag = 1;

    if (flag == 1)
        return 1;
    else
        return 2;
}

为什么 Code::Blocks 对我说:

|4|error: expected ';', ',' or ')' before numeric constant| 
||In function 'main':| |8|error: expected ']' before ';' token| 
|14|error: 'vett' undeclared (first use in this function)| 
|14|error: (Each undeclared identifier is reported only once| 
|14|error: for each function it appears in.)| 
|14|error: expected ']' before ';' token|
|14|error: expected ')' before ';' token| 
|16|warning: comparison between pointer and integer|

|18|warning: comparison between pointer and integer|
|24|error: expected ';', ',' or ')' before numeric constant|
||=== Build finished: 8 errors, 2 warnings ===|

我做错了什么?

4

3 回答 3

6

您在不应该使用的地方使用了预处理器;让我解释。

你的线

#define SIZE 10

告诉编译器所有出现的 4 个字母“ SIZE ”都将替换为“ 10 ”。

您的代码中的内容如下所示:

int find(int vet[], int SIZE, int elem); // before preprocessor
int find(int vet[], int 10, int elem);   // after preprocessor -> syntax error

第二行在 C 中无效。

你应该做的是尽量不使用你的预处理器定义作为变量名。例如,我所做的是:我用 CAPS 命名我的预处理器宏(你做了),并且总是只用CamelCasesmallletters命名我的函数变量。

编辑:我的建议:

int find(int vett[], int size, int elem);

int find(int vett[], int size, int elem)
{
    int i;
    int flag = 0;

    for (i = 0; i < size; i++)
        if (vett[i] == elem)
            flag = 1;

    if (flag == 1)
        return 1;
    else
        return 2;
}
于 2012-05-29T06:19:31.633 回答
3

如果您使用 SIZE 作为常量,则无需将其传递给函数:

int find(int vet[], int elem);

如果你希望函数是通用的,然后像这样定义它的原型:

int find(int vet[], int size, int elem);

并这样称呼它:

find(vett, SIZE, elem);

并这样写:

int find(int vett[], int size, int elem)
{
    int i;
    int flag = 0;

    for (i = 0; i < size; i++)
        if (vett[i] == elem)
            flag = 1;

    if (flag == 1)
        return 1;
    else
        return 2;
}

==EDIT== 关于评论中的问题:
find是一个指向函数的指针,它不保存返回值。您可以通过以下方式之一使用它:-1-

int answer = find(vett[size], size, elem);

if (answer == 1)
    printf ("\nI find the element!");
else if (find == 2)
    printf ("\nI did not find the element!");

-2-

if (find(vett[size], size, elem) == 1)
    printf ("\nI find the element!");
else if (find == 2)
    printf ("\nI did not find the element!");
于 2012-05-29T06:07:47.973 回答
2

您不是将整个向量 vett 传递给函数 find(),而是将其第 SIZE 个元素传递给函数。

于 2012-05-29T06:07:24.023 回答