预期为'int',但参数的类型为'char *'

时间:2020-09-25 12:20:22

标签: c

我是C语言的新手,我想制作一个程序,要求用户输入三个数字,并说出这三个数字中最大的一个。它对所有三个数字都引发相同的错误:“传递'max'的参数1使指针不带强制转换而成为整数”和“期望的'int'但参数的类型为'char *'”。同样,当它说“键入第一个数字:”而我键入时没有说“键入第二个数字:”,而是结束程序。

这是代码:

#include <stdio.h>
#include <stdlib.h>


int max (int num1, int num2, int num3)
{       
    printf("Type number 1: ");
    scanf("%d", num1);
    printf("Type number 2: ");
    scanf("%d", num2);
    printf("Type number 3: ");
    scanf("%d", num3);


    int result;
    if(num1 >= num2 && num1 >= num3)
    {
        result = num1;
    }

    else if(num2 >= num1 && num2 >= num3)
    {
        result = num2; 
    }
    else
    {
        result = num3;
    }    
}


int main()
{

    printf("%f", max("%f", "%f", "%f"));

    return 0;
}

3 个答案:

答案 0 :(得分:0)

您无需将任何参数传递给max()

  • 将函数定义简化为

    float max (void) { //.....
    
  • num1内将num2num3max()定义为局部变量。

  • 并像这样称呼

    printf("%f", max());
    

注意:希望您注意到函数的返回类型也已更改。

答案 1 :(得分:0)

您有几个问题,请用代码注释:

#include <stdio.h>
#include <stdlib.h>

int max(void) // No parameters
{
    int num1, num2, num3; // we place the variables at local scope

    printf("Type number 1: ");
    scanf("%d", &num1); // scanf wants a pointer
    printf("Type number 2: ");
    scanf("%d", &num2);
    printf("Type number 3: ");
    scanf("%d", &num3);

    int result;

    if (num1 >= num2 && num1 >= num3)
    {
        result = num1;
    }
    else if(num2 >= num1 && num2 >= num3)
    {
        result = num2; 
    }
    else
    {
        result = num3;
    }
    return result; // you need to return the value, otherwise main doesn't know the result
}

int main()
{
    printf("%d\n", max()); // use %d as specifier and call max without arguments

    return 0;
}

答案 2 :(得分:0)

在C语言中,我们创建带有参数的函数。您已经声明了函数,以便它使用三个整数作为参数,然后在Main函数中对其进行了调用。

编译器查看您提供的声明

int max (int num1, int num2, int num3)

它推断出您应该向函数传递三个整数值。

您将像这样在主体内部调用函数:

printf("%f", max("%f", "%f", "%f"));

现在,编译器查看max(“%f”,“%f”,“%f”)并推断出您正在使用三个字符串参数进行调用。它回头看一下声明,发现您告诉了您期望使用int的内容,因此它告诉您无法调用函数,因为它不知道如何将字符串转换为int。

考虑到这一点,我们如何才能使代码按您的预期工作?

  1. 首先,问问自己您的功能需要什么。有两种方法可以解决您的情况-您可以在主函数中获取值,然后将其传递给函数

在这种情况下,函数声明保持不变。

int a, b, c;

scanf("%d%d%d", &a, &b, &c);
int result = max(a, b, c);

第二个选项是不将任何内容传递给该函数,而只是让它从用户那里读取数字。在这种情况下,您可以这样声明函数:

int max(){
    int a, b, c;
    scanf("%d%d%d", &a, &b, &c);
    // rest of your code
}
  1. 使用printf时,请确保使用适当的格式字符串。 “%f”告诉编译器您希望将数字打印为浮点数,这意味着它将被打印为.0(例如3.0)。如果要打印整数,请使用“%d”。

  2. 最后,请确保阅读文档。它将为您节省很多麻烦。 :)