编译C中的错误

时间:2014-01-29 18:36:33

标签: c

我有一个计算机科学II课程的问题。想知道你们是否会帮助我。我从事计算机科学工作已经有两年了,所以如果事情变得容易的话,就不要对我这么辛苦。

无论如何,这是我的代码;

#include<stdio.h>
#include <stdarg.h>

/*The purpose of this program is to be able to enter 4 numbers
and let the program tell you which number the the largest, which 
number is the smallest, and then multiply the first 3 numbers together 
and then divides by the 4th one. once doe it will print the results.
The main goal is to help you understand pointers*/

int main()
{
    int a, b, c, d = 0;
    int result; 


    printf("Enter the 4 numbers"); //instructions
    scanf("%d%d%d%d", &a, &b, &c, &d); //collects 4 numbers

    result = (a*b*c)/d;

    max(int *a, int *b, int *c, int *d, int *result); //prints the max of the 4 numbers
    min(int *a, int *b, int *c, int *d, int *result); //prints the min of the 4 numbers

    return 0;
}

void max(int *a, int *b, int *c, int *d, int *result)
{
    if(a > b && a > c && a > d)
    {
        printf("The max is %d. ", a);
    }

    if(b > a && b > c && b > d)
    {
        printf("The max is %d. ", b);
    }

    if(c > a && c > b && c > d) 
    {
        printf("The max is %d. ", c);
    }

    if(d > a && d > b && d > c)
    {
        printf("The max is %d. ", d);
    }



}
void min (int *a, int *b, int *c, int *d, int *result)
{
    if(a < b && a < c && a < d)
    {
        printf("The min is %d. ", a);
    }

    if(b < a && b < c && b < d)
    {
        printf("The min is %d. ", b);
    }

    if(c < a && c < b && c < d)
    {
        printf("The min is %d. ", c);
    }

    if(d < a && d < b && d < c)
    {
        printf("The min is %d. ", d);
    }


}
void mul (int *a, int *b, int *c, int *d, int *result)
{
    printf("(a * b * c) / d = %d\n", result);
}

以下是我得到的错误;

lab1.c: In function 'main':
lab1.c:20:6: error: expected expression before 'int'
lab1.c:21:6: error: expected expression before 'int'
lab1.c: At top level:
lab1.c:26:6: warning: conflicting types for 'max' [enabled by default]
lab1.c:20:2: note: previous implicit declaration of 'max' was here
lab1.c:51:6: warning: conflicting types for 'min' [enabled by default]
lab1.c:21:2: note: previous implicit declaration of 'min' was here

任何帮助!?

5 个答案:

答案 0 :(得分:1)

max(int *a, int *b, int *c, int *d, int *result); //prints the max of the 4 numbers
min(int *a, int *b, int *c, int *d, int *result); //prints the min of the 4

那些是函数的前向声明,而不是函数调用,但是你忘记了返回类型,因此错误。要调用您的函数,请使用:

max(&a, &b, &c, &d, &result); //prints the max of the 4 numbers
min(&a, &b, &c, &d, &result); //prints the min of the 4

接下来,你 需要转发声明这些函数的位置(main):

void max(int *a, int *b, int *c, int *d, int *result);
void min (int *a, int *b, int *c, int *d, int *result);

int main() {
    /* ... */
}

最后,您的两个函数都没有设置result变量。

答案 1 :(得分:1)

你正在调用你的功能

max(int *a, int *b, int *c, int *d, int *result);  

将其更改为

 max(&a, &b, &c, &d, &e);   

min函数相同。

答案 2 :(得分:0)

为什么在函数调用中使用数据类型?

你应该这样做: -

  max(&a, &b, &c, &d, &result) ; 

和min一样

调用函数时,只提供不带数据类型的参数,或者你可以这样做: -

 int *pa =  &a ; 
 int *pb = &b ; 
 int *pc = &c ;
 int *pd = &d ; 
 int  *presult = &result ; 
 max(pa, pb, pc, pd, presult) ; 
 // similarly for min. 

答案 3 :(得分:0)

除了已经给出的答案:

int a, b, c, d = 0;

可能没有做你认为的那样。尝试:

int a=0,b=0,c=0,d=0;

另外,IDK如果你这样做是因为需要赋值,但传递int指针是完全没有意义的。它们不仅仅是将值复制到函数中。

另外,将结果引用传递给这些函数是没有意义的。只需返回函数的结果。

答案 4 :(得分:0)

上面给出的答案是正确的,但作为建议而不是传递指向函数的指针,传输变量并在所需函数中使用变量将更容易。
虽然没关系,但你可能也想让结果成为一个浮点值,就像除法一样,不能保证你总是得到完美的整数值(只是一个小建议)。