c - 这段代码计算不正确,有什么想法吗?

标签 c cs50

假设收银员欠顾客一些零钱,收银员的抽屉里有 25 美分 (25 美分)、10 美分 (10 美分)、5 美分 (5 美分) 和 1 美分 (1 美分)。要解决的问题是决定将哪些硬币以及每种硬币的数量交给顾客

如果某位顾客欠了 41 美分,那么第一口最大可以拿的就是 25 美分 41 - 25 = 16 再咬25美分就太大了 收银员会继续购买 10 美分的一口,留下 6 美分的问题 此时,收银员要求一口 5 美分,然后一口 1 美分

#include <cs50.h>
#include <stdio.h>

int main(void)
{   
    float f = get_float("Enter Cash: ");

    int q;
    int d;
    int n;
    int p;

    float quarter = 0.25;
    float dimes = 0.10;
    float nickels = 0.05;
    float pennies = 0.01;

    while ( f != 0)
    {

        if (f >= quarter){

            f = f - quarter;
            q = q + 1;
        } else if (f >= dimes && f < quarter) {

            f = f - dimes;
            d = d + 1;
        } else if (f >= nickels && f < dimes) {

            f = f - nickels;
            n = n + 1;        
        } else {
            f = f - pennies;
            p = p + 1;
        }
        printf ("Quarter: %d \n Dimes %d \n Nickels %d \n Pennies %d \n", q, 
        d, n, p);
    }
}

$ ./cash
Enter Cash: 6
Quarter: 32768 
 Dimes -1230737968 
 Nickels 0 
 Pennies 4205168 
Quarter: 32769 
 Dimes -1230737968 
 Nickels 0 
 Pennies 4205168 
Quarter: 32770 
 Dimes -1230737968 
 Nickels 0 
 Pennies 4205168 
Quarter: 32771 
 Dimes -1230737968 
 Nickels 0 
 Pennies 4205168 
Quarter: 32772

最佳答案

您需要初始化变量

int q = 0;
int d = 0;
int n = 0;
int p = 0;

否则它们的值不可预测

关于c - 这段代码计算不正确,有什么想法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56221578/

相关文章:

c - 关于 CS50 pset2 vigenere

c - 为什么此代码与单个 printf 的行为不同? ucontext.h

c - 外部声明和全局范围

c - 在没有库和指针的情况下构建 strcat

c - 凯撒密码的实现有什么问题?

凯撒 : lowercase letters that loop from z are not printing

arrays - 调用函数对 n 个数字的数组进行排序时出错

c++ - 将 SetSysColor 限制为一个应用程序

string - 在C语言中进行替换时输出的多余字符和符号

c - C 编程中的感叹号和 `strcmp` 函数