我是C的乞丐,而我是服用cs50。我在使用pset1 / cash时遇到了麻烦。我不知道我的代码有什么问题。该程序首先询问用户欠下了多少变化,然后吐出可以进行所述更改的最小硬币数量。它适用于大多数输入,但是当我检查它时,我得到预期" 18 \ n"而不是" 22 \ n" 请,我需要什么改变?
#include <stdio.h>
#include <cs50.h>
int main(void)
{
float change;
int cents, cents2, cents3, cents4;
int total = 0;
//Ask for user input and check
do
{
change = get_float("How much change?\n");
}
while (change < 0);
change = (change * 100) / 0.01;
//Multiply the float numbers
if (change < 1)
{
change *= 100;
}
else if (change < 10)
{
change *= 10;
}
//Change to int
cents = change;
//How many quarters
while (cents >= 2500)
{
cents -= 2500;
total++;
}
cents2 = cents;
//How many dimes
while (cents2 >= 1000)
{
cents2 -= 1000;
total++;
}
cents3 = cents2;
//How many nickels
while (cents3 >= 500)
{
cents3 -= 500;
total++;
}
cents4 = cents3;
//How many pennies
while (cents4 >= 100)
{
cents4 -= 100;
total++;
}
printf("%i\n", total);
}
编辑:我终于找到了错误。在这一行:change =(change * 100)/ 0.01;我添加了0.01,现在它的工作原理。 更改=(更改* 10000)+ 0.01;
答案 0 :(得分:0)
使用四舍五入功能将数字四舍五入。在代码的这一部分中,您需要添加round函数。
change = (change * 100) / 0.01;
必须是这样的:
cents = round(change * 100);
这会将数字四舍五入到最接近的整数如果您还有其他此类问题,则可以使用debug50之类的调试器,在其中通过单击行号的右侧然后在终端窗口中放置一个断点(执行clang的那个),您应该输入:
~/pset1/cash/ $ debug50 ./cash
或者您的程序被调用。这将打开调试器,并在其中找到所有变量及其相等值。按下播放按钮旁边的按钮,向前移动一行代码。
P.S 有很多与您完全一样的问题。只需在屏幕顶部的“搜索...”中搜索您的问题,我敢说您会找到问题的答案。