为什么在将2.2的输入作为浮点数时,我无法得到2的结果。
使用我的代码,2.2应该转换为220,当它通过第一个for循环时,我应该得到20的余数(这很好,因为它给了我8个硬币)。
但当它经历第二个循环时,我无法得到20/10 = 2,我总是得到1
。
顺便说一句,如果我只是把一角硬币<= 20,我会得到2小时。我不明白为什么,因为余数也等于20。
#include <cs50.h>
#include <stdio.h>
#include <math.h>
int main(void)
{
float change ;
float quarter ;
float dime ;
float nickel ;
float penny = 1;
int coins = 0;
int coins1 = 0;
int coins2 = 0;
int coins3 = 0;
int sum = 0;
int remainder ;
do
{
printf("What is the owed change: \n");
change = GetFloat();
change = round(change * 100);
printf("%f\n", change);
}
while(change < 0);
for(quarter = 25; quarter <= change; quarter+=25)
{
remainder = change - quarter;
coins++;
}
printf("%d,%d\n", remainder,coins);
for (dime = 10; dime <= remainder; dime += 10) //This is where the problem starts.
{
remainder = remainder - dime;
coins1++;
}
printf("%d,%d\n", remainder,coins1);
for (nickel = 5; nickel < remainder; nickel += 5)
{
remainder = remainder - nickel;
coins2++;
}
printf("%d,%d\n", remainder,coins2);
for (penny = 1; penny < remainder; penny += 1)
{
remainder = remainder - penny;
coins3++;
}
printf("%d,%d\n", remainder,coins3);
printf("\n%d\n", sum = coins + coins1 + coins2 + coins3);
}
答案 0 :(得分:3)
您在dime
循环的每次运行期间从remainder
减去for
,而在循环的每次迭代期间dime
正在增加for
。让我们假设在第二个remainder
循环之前最初的变化是20。第一个循环执行将减去10,将dime
保留为10.然后i
增加10并且现在是20.循环条件失败,因为20> 10,循环只运行一次。
我的建议是为变量提供更直观的名称,例如x
或dimes_needed
用于基本循环计数器,而coins1
代替{{1}}