继续说在double int pt函数之前有一个预期的表达式
#include <stdio.h>
int pt (int a, int b)
{
int c, result;
c = (a * a) + (b + b);
result = double sqrt (double c);
return result;
}
int main (void)
{
int d, e, f;
int pt (int a, int b);
printf("type enter after input of the two legs");
scanf("%i", &d);
scanf("%i", &e);
f = pt (d,e);
printf("the hypotenuse is %i", f);
return 0;
}
答案 0 :(得分:4)
更改
result = double sqrt (double c);
到
result = sqrt(c);
由于隐式转换,当您将c
传递到double
函数时,不必将sqrt
投射到sqrt((double) c)
。如果您仍想进行演员表,那么正确的方法是#include <math.h>
。
另外,sqrt
使用sqrt
函数。
注意:不需要将int
的返回类型强制转换为result
(因int
类型为{{1}}而相关) - 但是有些编译器可能会发出有关隐式转换的警告(Credit to @MattMcNabb)。将演员阵容告知其他编码人员,精确损失是故意的也是一种好习惯。
答案 1 :(得分:2)
double sqrt (double c);
是函数声明。 (它也是函数原型)。这就是你宣布函数存在的方式,以及它所采用的参数和返回的内容。这里的单词c
没有任何意义,可以省略。
如果您想调用某个功能,请不要重复此信息。您只需提供函数名称,然后是值列表,例如sqrt(c)
。
在您的代码中,sqrt
尚未声明。函数必须在调用之前声明。它不可能同时声明一个函数并调用它;你必须先申报。
(历史记录:从C99开始就是这样;在C89中你可以调用一个未声明的函数,编译器会假设你想要声明的函数返回int
;这会导致任何函数的未定义行为实际上并没有返回int
)。
您可以提供自己的声明,只要它符合标准声明:
double sqrt(double);
然而,最好只使用标准声明:
#include <math.h>
这是有效的,因为文件math.h
包含行double sqrt(double);
(或类似的东西)。
然后你可以写:
result = sqrt(c);
请注意,您不需要使用与此函数调用相关的任何强制类型转换。由于存在函数原型,编译器知道即使您提供int
,它也应该将int
转换为double
(它知道如何操作),反之亦然。
答案 2 :(得分:0)
谈论你正在做的演员? 你的演员抱怨它应该是这样的:
你的结果是一个整数,所以你应该将它强制转换为int .. 但如果你想把任何东西加倍,它应该如下
result =(double)sqrt((double)c) 或另一种方式是双倍(sqrt((double)c)
但是如果你想把它转换为int那么 result =(int)sqrt((double)c) 要么 result = int(sqrt((double)c)) 希望这有助于好运