检查 CS50 Harvard Cash App 中的 50 个错误
Check 50 Error in Cash App for CS50 Harvard
对编码非常陌生,因此感谢您的帮助,一段时间以来一直被这些检查错误所困。
//source codde
#include <stdio.h>
#include <cs50.h>
#include <unistd.h>
int main(void)
{
float user;
int change, coins, decimals;
do
{
printf("Enter change amount\n");
user = get_float("");
} while (user <= 0);
change = user * 100;
coins = 0;
while (change >= 25)
{
change = change - 25;
coins++;
}
while (change >= 10)
{
change = change - 10;
coins++;
}
while (change >= 5)
{
change = change - 5;
coins++;
}
while (change >= 1)
{
change = change - 1;
coins++;
}
printf("You have entered\f%.1f\n", user);
sleep(1);
printf("The least amount of coins possible\f%.2d\n", coins);
}
我不断收到的错误消息:
:( 输入 0.01 产生输出 1
预期“1\n”,而不是 "You have enter..." 这实际上 returns 返回 01 所以不确定
:( 1.6 的输入产生 7 的输出
预期“7\n”,而不是 "You have enter..." 同样的事情只是 07 有没有办法删除零?
:( 4.2 的输入产生 18 的输出
应为“18\n”,而不是 "You have enter..."
您是否忘记将您的输入四舍五入到最接近的美分?
这个我不确定它会产生 22
的输出
对于输入 4.20
,您看到 22
而不是 18
的原因是浮点数不精确。浮点数不能准确表示值 4.20
,因此它会在您的变量中存储一个比 4.20
稍大或稍小的值。
如果使用的值稍小(例如 4.1999999 或 4.19998567),则将其乘以 100 会得到接近 419.99999 的值。将其转换为 int
会将其截断为 419 并为您提供 22 个硬币的结果。
解决方案是在将浮点数转换为整数时舍入到最接近的整数,而不是截断。适用于小浮点数的一个常见技巧是在截断之前添加 0.5:
change = user * 100 + 0.5;
419.5000 到 420.4999 范围内的值将变成 420.0000 到 420.99999 范围内的值。然后截断将产生 420.
您自然也可以使用 c
附带的内置舍入函数。
您还应该考虑使用 double
而不是 float
。使用 float
节省的 space 在现代桌面系统上通常不值得。
问题集很清楚程序应该提供什么样的输出。你不匹配那个。再读一遍。
并且不要忘记根据问题集对您的输入进行四舍五入。
对编码非常陌生,因此感谢您的帮助,一段时间以来一直被这些检查错误所困。
//source codde
#include <stdio.h>
#include <cs50.h>
#include <unistd.h>
int main(void)
{
float user;
int change, coins, decimals;
do
{
printf("Enter change amount\n");
user = get_float("");
} while (user <= 0);
change = user * 100;
coins = 0;
while (change >= 25)
{
change = change - 25;
coins++;
}
while (change >= 10)
{
change = change - 10;
coins++;
}
while (change >= 5)
{
change = change - 5;
coins++;
}
while (change >= 1)
{
change = change - 1;
coins++;
}
printf("You have entered\f%.1f\n", user);
sleep(1);
printf("The least amount of coins possible\f%.2d\n", coins);
}
我不断收到的错误消息: :( 输入 0.01 产生输出 1 预期“1\n”,而不是 "You have enter..." 这实际上 returns 返回 01 所以不确定 :( 1.6 的输入产生 7 的输出 预期“7\n”,而不是 "You have enter..." 同样的事情只是 07 有没有办法删除零?
:( 4.2 的输入产生 18 的输出 应为“18\n”,而不是 "You have enter..." 您是否忘记将您的输入四舍五入到最接近的美分?
这个我不确定它会产生 22
的输出对于输入 4.20
,您看到 22
而不是 18
的原因是浮点数不精确。浮点数不能准确表示值 4.20
,因此它会在您的变量中存储一个比 4.20
稍大或稍小的值。
如果使用的值稍小(例如 4.1999999 或 4.19998567),则将其乘以 100 会得到接近 419.99999 的值。将其转换为 int
会将其截断为 419 并为您提供 22 个硬币的结果。
解决方案是在将浮点数转换为整数时舍入到最接近的整数,而不是截断。适用于小浮点数的一个常见技巧是在截断之前添加 0.5:
change = user * 100 + 0.5;
419.5000 到 420.4999 范围内的值将变成 420.0000 到 420.99999 范围内的值。然后截断将产生 420.
您自然也可以使用 c
附带的内置舍入函数。
您还应该考虑使用 double
而不是 float
。使用 float
节省的 space 在现代桌面系统上通常不值得。
问题集很清楚程序应该提供什么样的输出。你不匹配那个。再读一遍。
并且不要忘记根据问题集对您的输入进行四舍五入。