CS50现金有效输入退出程序

CS50现金有效输入退出程序,c,while-loop,return-value,do-while,cs50,C,While Loop,Return Value,Do While,Cs50,我不知道为什么我的更改值从未在第二个循环中计算,也不知道我的print语句在输出硬币的最后运行。输入有效输入后,程序应将浮点数转换为整数,并输入下一个while循环。然后根据更改值检查每个if语句中的条件是否为真,直到while条件为假 #include <cs50.h> #include <stdio.h> int main(void) { int coins = 0; float n; int change; do {

我不知道为什么我的更改值从未在第二个循环中计算,也不知道我的print语句在输出硬币的最后运行。输入有效输入后,程序应将浮点数转换为整数,并输入下一个while循环。然后根据更改值检查每个if语句中的条件是否为真,直到while条件为假

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

int main(void) {

    int coins = 0;
    float n;
    int change;
    do
    {
       n = get_float("How much do I owe you? \n");
    } while (n < 0); // continue prompt while true less than zero

    change = n * 100;

    while (change > 0)
    {
        if (change > 25) // change .25 cents
        {
             coins = coins + 1;
             change = change - 25;
        }
        else if (change > 5 && change <= 10)  // change 10 cents
        {
             coins = coins + 1;
             change = change - 10;
        }
        else if (change > 1 && change <= 5)  // change 5 cents
        {
             coins = coins + 1;
             change = change - 5;
        }
        else  // change 1 cents
        {
             coins = coins + 1;
             change = change - 1;
         }
        return coins;
      }
    printf("%d\n", coins);
}
#包括
#包括
内部主(空){
整数=0;
浮动n;
智力变化;
做
{
n=获得浮动(“我欠你多少钱?\n”);
}while(n<0);//true小于零时继续提示
变化=n*100;
而(更改>0)
{
如果(更改>25)//更改0.25美分
{
硬币=硬币+1;
改变=改变-25;
}

否则,如果(change>5&&change 1&&change问题来自
返回硬币;
行,该行位于
while
循环内

你应该这样写:

while (change > 0) 
{
    /*update coins and change
      but do not use return.*/
}

printf("%d\n", coins);

/* as return will exit from your function, 
    you want it at the end*/
return coins;

这似乎是解决问题的最佳时机。即使是快速回答也会帮助您快速找到问题。请回答您的问题,并展示输入、预期和实际输出的示例谢谢您的帮助!现在我只需要修正我的逻辑。但我现在明白我错在哪里了。