程序将计算大多数提供的值,除了一些
Program will calculate most provided values except for some
这是一个简单的 C 语言货币兑换计算器,适用于我正在学习的课程 (CS50)。
它工作得很好,直到你提交值 0.15
、4.2
和 4.3
(这些是我到目前为止捕获的值),程序冻结,不会输出任何结果。我必须CTRL + C
强制退出。
如果我尝试另一个号码,说 0.41
我会得到正确答案。
为什么会这样?
#include <cs50.h>
#include <stdio.h>
int main (void) {
printf("How much change do you owe: ");
float amount;
// (;;) represents an infinite loop
for (;;)
{
amount = GetFloat();
// if user's input is negative, the script will break and prompt the user to enter a positive value.
if (amount >= 0) {
break;
}
printf("Please provide a positive value: ");
}
float cents = 100.0 * amount;
float quarter = 0;
float dime = 0;
float nickel = 0;
float penny = 0;
// I used the shortcut to represent (cents = cents + 25.0)
while (cents > 0) {
if (cents >= 25.0) {
cents -= 25.0;
quarter += 1;
} else if (cents >= 10.0) {
cents -= 10.0;
dime += 1;
} else if (cents >= 5.0) {
cents -= 5.0;
nickel += 1;
} else if (cents >= 1.0) {
cents -= 1.0;
penny += 1;
}
}
float coins = quarter + dime + nickel + penny;
printf("%f\n", coins);
}
您可能应该将具有离散值的项目表示为整数而不是浮点数。如果 cents 是非整数(例如 10.1),则该循环将永远不会结束。
我试过了,由于浮点错误,我输入了 0.15 美分到 15.0000010。
什么是#include <cs50.h>
?还有
你的逻辑不通。这是c编程课程吗?
这些是您的金额值
float cents = 100.0 * amount;
float quarter = 0;
float dime = 0;
float nickel = 0;
float penny = 0;
然后你给它们一个零值,当这些值加起来等于 0 时。这就是为什么大声笑,你告诉机器打印 0 并这样做了。这些是你的条件,为什么你需要一个循环来修复你的条件。您可以使用大小写开关来简化此操作或仅修复您的条件。
while (cents > 0) {
if (cents >= 25.0) {
cents -= 25.0;
quarter += 1;
} else if (cents >= 10.0) {
cents -= 10.0;
dime += 1;
} else if (cents >= 5.0) {
cents -= 5.0;
nickel += 1;
} else if (cents >= 1.0) {
cents -= 1.0;
penny += 1;
}
}
在顶部给 amount 一个值,因为值可以是任何数字,将值设置为 =0 并在 scanf 之后放入 printf 以显示用户再次输入的值。
这是一个简单的 C 语言货币兑换计算器,适用于我正在学习的课程 (CS50)。
它工作得很好,直到你提交值 0.15
、4.2
和 4.3
(这些是我到目前为止捕获的值),程序冻结,不会输出任何结果。我必须CTRL + C
强制退出。
如果我尝试另一个号码,说 0.41
我会得到正确答案。
为什么会这样?
#include <cs50.h>
#include <stdio.h>
int main (void) {
printf("How much change do you owe: ");
float amount;
// (;;) represents an infinite loop
for (;;)
{
amount = GetFloat();
// if user's input is negative, the script will break and prompt the user to enter a positive value.
if (amount >= 0) {
break;
}
printf("Please provide a positive value: ");
}
float cents = 100.0 * amount;
float quarter = 0;
float dime = 0;
float nickel = 0;
float penny = 0;
// I used the shortcut to represent (cents = cents + 25.0)
while (cents > 0) {
if (cents >= 25.0) {
cents -= 25.0;
quarter += 1;
} else if (cents >= 10.0) {
cents -= 10.0;
dime += 1;
} else if (cents >= 5.0) {
cents -= 5.0;
nickel += 1;
} else if (cents >= 1.0) {
cents -= 1.0;
penny += 1;
}
}
float coins = quarter + dime + nickel + penny;
printf("%f\n", coins);
}
您可能应该将具有离散值的项目表示为整数而不是浮点数。如果 cents 是非整数(例如 10.1),则该循环将永远不会结束。
我试过了,由于浮点错误,我输入了 0.15 美分到 15.0000010。
什么是#include <cs50.h>
?还有
你的逻辑不通。这是c编程课程吗? 这些是您的金额值
float cents = 100.0 * amount;
float quarter = 0;
float dime = 0;
float nickel = 0;
float penny = 0;
然后你给它们一个零值,当这些值加起来等于 0 时。这就是为什么大声笑,你告诉机器打印 0 并这样做了。这些是你的条件,为什么你需要一个循环来修复你的条件。您可以使用大小写开关来简化此操作或仅修复您的条件。
while (cents > 0) {
if (cents >= 25.0) {
cents -= 25.0;
quarter += 1;
} else if (cents >= 10.0) {
cents -= 10.0;
dime += 1;
} else if (cents >= 5.0) {
cents -= 5.0;
nickel += 1;
} else if (cents >= 1.0) {
cents -= 1.0;
penny += 1;
}
}
在顶部给 amount 一个值,因为值可以是任何数字,将值设置为 =0 并在 scanf 之后放入 printf 以显示用户再次输入的值。