2016-11-12 69 views
-1
printf("Insert money for payment: "); 

while(!(scanf("%g\n", &insertMoney) == EOF || !insertMoney)){ 

    if(insertMoney == 0.05f ||insertMoney == 100 || insertMoney == 50 || insertMoney == 20 || insertMoney == 10 || insertMoney == 5 || insertMoney == 2 || insertMoney == 1 || insertMoney == 0.50 || insertMoney == 0.2 || insertMoney == 0.20 || insertMoney == 0.1 || insertMoney == 0.02 || insertMoney == 0.01 || insertMoney == 0)   
     totalSum += insertMoney; 
    else{ 
     fake = insertMoney; 
     printf("%g is invalid!\n", fake); 
     return 1;  
     } 
    } 

如果我插入100,50或任何數字if,正常工作。 如果我插入0.20或0.05(任何數字與0.xx)說我是無效的。比較C中的數字

PS:insertMoney是float。

+1

這個問題[爲什麼不使用雙人或浮動代表貨幣?](http://stackoverflow.com/questions/3730019/why-not-use-double浮動到代表貨幣)可能是你感興趣的。 –

+1

閱讀[scanf](http://en.cppreference.com/w/c/io/fscanf)的文檔以及您正在使用的每個功能。另請閱讀http://floating-point-gui.de/ –

+1

嗯,'scanf(「%g \ n」,&insertMoney)== EOF' ???這裏scanf的返回值只能是0或1.你想在這裏做什麼? –

回答

0
int fequal(float a, float b) 
{ 
    float epsilon = 0.000000001; 

    if (fabs(a - b) < epsilon) 
     return 1; 

    return 0; 
} 


fequal(0.5, insertMoney) 

這就是答案:)