我是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;
}
答案 0 :(得分:0)
您无需将任何参数传递给max()
。
将函数定义简化为
float max (void) { //.....
在num1
内将num2
,num3
和max()
定义为局部变量。
并像这样称呼
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。
考虑到这一点,我们如何才能使代码按您的预期工作?
在这种情况下,函数声明保持不变。
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
}
使用printf时,请确保使用适当的格式字符串。 “%f”告诉编译器您希望将数字打印为浮点数,这意味着它将被打印为.0(例如3.0)。如果要打印整数,请使用“%d”。
最后,请确保阅读文档。它将为您节省很多麻烦。 :)