2014-09-24 63 views
2

我正在尝试为哈佛大学完成CS50x的习题集1,并且在我的程序中遇到过一种错误。它向我抛出一个浮点异常错误;我已经研究了这一点,它似乎主要是当你试图除以零时引起的。现在,当我查看我的代码时,我似乎无法找到一个变量甚至等于零的地方,更不用说被零除。无法解决浮点异常

#include <stdio.h> 
#include <cs50.h> 

int changeF(change, div) 
{ 
    int c = change/div; 
    return c; 
} 

int main(void) 
{ 
    printf("Enter the bill amount:"); 
    float bill = GetFloat(); 
    printf("Enter the payment amount:"); 
    float payment = GetFloat(); 
    float q = .25; float di = .1; float n = .05; float p = .01; 
    float change = payment - bill; 
    do 
    { 
     if (bill >= 0 && payment >= 0 && change >= 0) 
     { 
      if (change >= q) 
      { 
       float quarters = changeF(change, q); 
       printf("%f quarters", quarters); 
       change = change - (.25*quarters); 
      } 
      if (change >= di) 
      { 
       float dimes = changeF(change, di); 
       printf("%f dimes", dimes); 
       change = change - (.1*dimes); 
      } 
      if (change >= n) 
      { 
       float nickels = changeF(change, n); 
       printf("%f nickels", nickels); 
       change = change - (.05*nickels); 
      } 
      if (change >= p) 
      { 
       float pennies = changeF(change, p); 
       printf("%f pennies", pennies); 
       change = change - (.01*pennies); 
      } 
     } 
    } 
    while (change > 0); 
} 

回答

0
int changeF(change, div) 

的问题是在这个函数。它的返回类型是int因此,当c的值为0.1,0.2或类似的东西它变成0并返回它。另一个问题是您没有在定义中指定数据类型(旧样式K & R预标准函数定义)。这就是为什么它采用默认数据类型,默认数据类型为int

您应该按照以下方式更新代码。

double changeF(double change, double div) 
1

你需要给类型给函数的参数:

changeF(float change, float div) 

我不知道,如果你真的想这个函数的返回是整数或浮点数!

1

changeF()功能写的是:

int changeF(change, div) 
{ 
    int c = change/div; 
    return c; 
} 

即使用旧的(C89,或预标准 - 而不是更近的C99或C11)的函数符号,隐式声明changeF()取两个int参数。

当你调用changeF()float值是小于1.0的div说法,它被转换为0int值。然后你除以零,产生你的FPE。