我終於得到了我的更改程序打印出一些數字,而不是拋出浮點異常。但是,現在它略微偏離。該程序不是提供2個季度,1個硬幣,1個鎳和2個便士,而只是選擇一個便士,我無法從代碼的條件或結構檢查中找出原因。我加了一些檢查,在每個if語句,但甚至沒有被打印出來,我現在居然糊塗..printf不工作和其他麻煩
#include <stdio.h>
#include <cs50.h>
#include <math.h>
int changeF(float change, float 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.0 && payment >= 0.0 && change >= 0.0)
{
if (change >= q)
{
int quarters = changeF(change, q);
printf("%d quarters\n", quarters);
change = change - (.25*quarters);
}
if (change >= di)
{
int dimes = changeF(change, di);
printf("%d dimes\n", dimes);
change = change - (.1*dimes);
}
if (change >= n)
{
int nickels = changeF(change, n);
printf("%d nickels\n", nickels);
change = change - (.05*nickels);
printf("%f change", change);
}
if (change >= p)
{
int pennies = changeF(change, p);
printf("%d pennies\n", pennies);
change = change - (.01*pennies);
printf("%f", change);
}
}
}
while (change > 0.0);
}
編譯所有警告和調試信息('gcc -Wall -g')。然後**使用調試器**('gdb') – 2014-09-24 12:41:17
添加一些跟蹤,顯示if(bill> = 0.0)之前的賬單,付款和更改 請注意,所有的浮點數都應該有'f'在他們之後。 0.0被解釋爲0.0d,然後必須下變換爲浮點數,這可能會導致奇怪。在這種情況下,當然不是,但在處理花車時,這是一個好習慣 – 2014-09-24 13:22:46