無論你在代碼中做的貼出來,不使用double
數據類型在所有的函數中。並且從函數返回類型看來,您將永遠不會看到返回值> 127。
該代碼突出了一些問題:(這只是舉例)
char hexRepresentation(double n){
if(n > 9){//comparing (double>int). Bad.
if(n==10) return 'A';
if(n==11) return 'B';
if(n==12) return 'C';//You wrote if(double == int). Bad.
if(n==13) return 'D';
if(n==14) return 'E';
if(n==15) return 'F';
}
return (char)n; //again unsafe downgrade from 8 bytes double to 1 byte char.
}
即使你解決您的編譯器錯誤,你可能不會得到想要的結果總是,由於函數數據類型的這種危險用法。
知道爲什麼它的壞,看這裏:
http://www.cygnus-software.com/papers/comparingfloats/Comparing%20floating%20point%20numbers.htm
我會在函數體中使用fabs(n)
,而不是n
無處不在。
如果在此函數定義之前存在相同命名函數hexRepresentation
的預先聲明或定義,則會顯示錯誤「'hexRepresentation'的衝突類型''。另外,如果你沒有聲明一個函數,它只會在被調用後出現,編譯器會自動假定爲int
。
因此,在main()之前聲明並定義你的函數或者在main()之前聲明並在文件的其他地方定義函數,但是使用相同的函數原型。
做:
char hexRepresentation(double); //Declaration before main
main()
{
...
}
char hexRepresentation(double n){//Definition after main
...
}
或者
char hexRepresentation(double n){ //Declaration and definition before main
...
}
main()
{
...
}
會是什麼回報,如果你在5.6過去了?甚至10以下的整數值? '(char)5'不是'5'''。 – chris
除了有問題的決定讓它接受'雙',你在使用之前是否聲明瞭這個函數?如果您來自Java,您可能已經忘記了這一點。 –
我現在甚至不關心這一點。我將n作爲其他函數的雙精度 - 特別是來自math.h的pow()。到目前爲止,我只使用整數。 –