c - 此解决方案不接受任何浮点数
问题描述
目前在其中一个 cs50x 问题集“现金”上,这是一个简单的“询问欠多少零钱,然后计算需要多少硬币”任务,所以不是在这里寻求解决方案,但我不明白为什么这行不通。
虽然它确实要求输入,但当我输入诸如 5.96 之类的浮点数时,它只是挂起。没有回报,没有任何错误。我必须强行关闭它。另一件事是 while 循环在设置为 0 时做同样的事情,这是为了获得确切数量的硬币而预期的做事方式。
我知道这段代码的效率有多低,并且有更简单的做事方式。我只是想了解原因,以避免继续犯同样的错误。谢谢。
#include <stdio.h>
#include <cs50.h>
#include <math.h>
int main(void)
{
// changes and other containers
int p = 1;
int n = 5;
int d = 10;
int q = 25;
int x = 0;
float c;
// get how much change is owed in float
do
{
c = get_float("Change owed: ");
}
while (c < 0);
// int conversion to avoid imprecision
int a = round(c * 100);
// 1 because 0 spits out an unknown error
while (a >= 1)
{
// if the converted amount is bigger than a quarter
if (a >= q)
{
// x = number of coins, a = amount left
x = a / q;
a = a % q;
}
else if (a >= d)
{
x = x + a / d;
a = a - a % d;
}
else if (a >= n)
{
x = x + a / n;
a = a - a % n;
}
else
{
x = x + a / p;
a = a - a % p;
}
}
printf("%i\n", x);
printf("%i\n", a);
}
解决方案
感谢 WhozCraig,我发现我的逻辑有问题。
#include <stdio.h>
#include <cs50.h>
#include <math.h>
int main(void)
{
// changes and other containers
int p = 1;
int n = 5;
int d = 10;
int q = 25;
int x = 0;
float c;
// get how much change is owed in float
do
{
c = get_float("Change owed: ");
}
while (c < 0);
// int conversion to avoid imprecision
int a = round(c * 100);
// 1 because 0 spits out an unknown error
while (a >= 1)
{
// if the converted amount is bigger than a quarter
if (a >= q)
{
// x = number of coins, a = amount left
x = a / q;
a = a % q;
}
else if (a >= d)
{
x = x + a / d;
a = a % d;
}
else if (a >= n)
{
x = x + a / n;
a = a % n;
}
else
{
x = x + a / p;
a = a % p;
}
}
printf("%i\n", x);
printf("%i\n", a);
}
推荐阅读
- css - 更改 Jekyll Minima(默认)主题中的字体
- java - NullPointerException 来自构造函数中的模拟 bean - 如何通过首先自定义构造函数来正确模拟构造函数中的 mockBean?
- c++ - std::string 生成链接器错误—— const char* 不会。为什么?
- javascript - 如何在具有输入的子组件中访问父组件的 for 循环?
- docker - Docker for Mac | Docker Compose | Cannot access containers using localhost
- c# - 如何在 C# 的通用列表中查找不匹配的记录
- django - How to pass created object in createview right to updateview in django
- sql - SQL filter out rows with duplicate cell value
- android - Android Studio 无法识别布局中的 xml 文件
- reactjs - 如何根据从选择下拉列表中传递的值使用 find() 方法中的数据更新状态