i具有以下代码,其中如果条件似乎无法正常工作。
为例,如果我输入0.29给出的结果为
季度:1角色:0镍:4205264便士:4
您可以看到这是不正确的,因为在第一个if语句执行"如果(cents> = 25)"之后,这将留下剩余的4,该剩余4个存储在" Cents"变量中。这应该意味着接下来的两个"如果"语句返回" 0",而最终if语句则执行'if(Cents> = 1)'。但是,事实并非如此,因为您可以看到Nickles返回4205264的值。
输入1.17时,结果按预期返回:
季度:4角色:1镍:1便士:2
#include <cs50.h>
#include <math.h>
#include <stdio.h>
int main(void)
{
float dollars;
int cents;
int quartersUsed;
int dimesUsed;
int nickelsUsed;
int penniesUsed;
do
{
dollars = get_float("Float: ");
while (dollars <= 0) {
dollars = get_float("Float: ");
}
cents = roundf(dollars * 100);
printf("%in", cents);
if (cents >= 25) {
quartersUsed= cents / 25;
cents = cents % 25;
}
if (cents >= 10) {
dimesUsed = cents / 10;
cents = cents % 10;
}
if (cents >= 5) {
nickelsUsed = cents / 5;
cents = cents % 5;
}
if (cents >= 1) {
penniesUsed = cents / 1;
cents = cents % 1;
}
printf("Quarters: %in",quartersUsed);
printf("Dimes: %in",dimesUsed);
printf("Nickels: %in",nickelsUsed);
printf("Pennies: %in",penniesUsed);
}
while (dollars == false);
}
您需要初始化变量,因为如果您不输入if块,示例中发生了什么,您将结束从未进行过Intialial的变量。p>在C中,没有为您完成Intialization,因此,如果您不在变量中放置一个值,则它们的值将具有不确定的值(取决于以前在内存中存在哪个值)。
请注意,您的如果条款不仅是不必要的,因为它们也可能会让您的某些变量非初始化打印(这可能是什么导致输出中的问题)。,就像您不需要所有这些条件检查一样,您不需要所有这些变量。请记住,C程序员倾向于尽可能关注运营和空间的经济。检查下面的实现,将其与您的实现进行比较,然后尝试猜测它节省了多少操作和空间。(由于您没有发布" CS59.H"库,因此我对其进行了评论,并实现了一个始终返回" 1.17"的" get_float"函数。)
#include <stdio.h>
#include <math.h>
//#include <cs50.h>
float get_float(const char *)
{
return 1.17;
}
int main()
{
float dollars;
while((dollars = get_float("Float: ")) <= 0);
int cents = (int) roundf(dollars * 100);
printf("%in", cents);
printf("Quarters: %in", cents / 25);
printf("Dimes: %in", (cents = cents % 25) / 10);
printf("Nickels: %in", (cents = cents % 10) / 5);
printf("Pennies: %in", cents % 5);
return 0;
}