【发布时间】:2017-10-04 21:28:55
【问题描述】:
我正在创建一个程序来将二进制、十进制、十六进制和八进制转换为这些选项中的任何一个。对于十六进制,我需要一种将大于 9 的值格式化为 A、B、C、D、E、F 之一的方法。由于这将在多个函数中重复,我决定创建以下函数:
char hexRepresentation(double n){
if(n > 9){
if(n==10) return 'A';
if(n==11) return 'B';
if(n==12) return 'C';
if(n==13) return 'D';
if(n==14) return 'E';
if(n==15) return 'F';
}
return (char)n;
}
但是,当我尝试编译时,我收到了错误
“hexRepresentation”的类型冲突
我是 C 语言的新手,来自 Java,我正在为最简单的实现方法而苦恼。任何帮助将不胜感激!
【问题讨论】:
-
如果你通过了 5.6 会返回什么?甚至是小于 10 的整数值?
(char)5不是'5'。 -
除了接受
doubles 的可疑决定之外,您是否在使用前声明了该功能?如果您来自 Java,您可能已经忘记了这一点。 -
目前我什至不关心这个。我从其他函数中得到 n 作为双精度 - 特别是从 math.h 的 pow() 中。到目前为止,我只使用整数。
-
@DanielFischer,请原谅我;就像我说的,全新的。我想我知道你的意思。您指的是在 main() 之前命名其他函数,对吗?我还有其他功能,嗯,没有这样做就可以发挥作用。
-
无需为新人道歉。至于缺少声明,在旧版本的 C(C99 之前)中,使用以前未声明的函数提供了返回类型为
int的函数的隐式声明。默认情况下,许多编译器仍然在某种 C99 之前的模式下工作,并接受隐式函数声明。但是,如果您稍后声明并定义返回类型与int不兼容的函数,您会得到这样的incompatible type错误。使用 gcc,在-std=c99模式下,您将收到隐式声明函数的警告,如果添加-pedantic-errors,则会收到错误。
标签: c function compiler-errors