2015-12-08 46 views
-4

我想創建一個代碼,檢查用戶輸入是否是浮動的。這是我有:檢查輸入是否爲浮點或不在C中?

while (ceil(var1) == var1 || ceil(var2) == var2) { 
      printf("Not float \n"); 
      printf("enter float: "); 
      scanf("%f,%f", var1, var2); 

      var1 = *num1; 
      var2 = *num2; 
    } 

這工作了一點,但如果我輸入類似:2,3它不會接受這個作爲浮動。

+2

您的代碼不完整。什麼是'var1'和'var2'定義爲?那麼'num1'和'num2'是什麼? –

+0

@AndrewHenle var1和var2都被定義爲float和var1和var2 –

+3

'num1'和'num2'是什麼? – immibis

回答

1

看來你試圖確定的是浮點變量是否有小數部分(或者輸入是否可以精確地表示爲一個整數)。這是不一樣的

輸入是浮動還是不

這實際上是沒有意義的,一個float變量始終是float

比較浮點值的相等性總是會有問題。您通常必須測試兩個值之間的差異小於一些任意小但可表示和可接受的錯誤限制。例如:

晶圓廠(小區(VAR1) - VAR1)< FLT_EPSILON

您可以嘗試使用modf(),但它可能有同樣的問題。 double intpart; double fractpart = modf(var1,& intpart); 如果(FABS(fractpart)< FLT_EPSILON) { //沒有小數部分 }

注意,C數學庫爲double而不是float定義。在很多情況下,隱式轉換是安全的,但不適用於傳遞modf()的指針參數。