关于C的基础问题

来源:百度知道 编辑:UC知道 时间:2024/05/03 04:48:03
int d;
int a;
d=(int) sqrt(a);
a是从键盘读入的整数。但在平台上运行后出现错误

(17) : error C2668: “sqrt”: 对重载函数的调用不明确
VC8\include\math.h(581): 可能是“long double sqrt(long double)”
VC8\include\math.h(533): 或“float sqrt(float)”
VC8\include\math.h(128): 或“double sqrt(double)”
试图匹配参数列表“(int)”时

帮忙看下解决下
刚学C,和以前的pascal相差比较大
但是那个a是键盘读入的整数 不能用那些类型吧。
有函数可以int转换为double吗
而且 编译器不是可以自动把低精度改成高精度吗

C语言里面有一块小知识叫“隐式转换”
按照你这里的错误,在math.h中肯定定义了3个sqrt函数分别是
long double sqrt(long double)
float sqrt(float)
double sqrt(double)
你在调用sqrt的时候给sqrt传了一个参数叫a
a的数据类型是int
由于已经定义的sqrt并没有这种情况 double sqrt(int) 所以a必须经过“隐式转换”转换成其他数据类型才能调用sqrt函数
但是int向double float等数据类型转换的时候等级是相等的 ,也就是说不会优先转换成特定的某种类型。所以编译器就不知道该调用math.h中的哪个sqrt函数了
你可以改成:
d=(int)sqrt((float)(a))这样的话就没问题了

C里面sqrt的参数不能是int 你可以改成float或者double