在C中循环。程序中的第一个循环不起作用并且是无限的

时间:2016-02-13 09:32:12

标签: c loops cs50

我不明白为什么第一个循环不起作用。即使填充的欠款浮动实际上大于0,它也是一个无限循环。为什么循环不工作?

#import <cs50.h> 
#import <stdio.h>

int main(void)
{
    float owed = -1 ;

    while (owed < 0) 
    {
        printf("O hai! How much change is owed?\n") ;
        float owed = GetFloat() ;
        owed = owed * 100 ;
    }

    int coins = 0 ;

    while (owed >= 25)
    {
        owed = owed - 25 ;
        coins = coins + 1 ;
    }

    while (owed >= 10)
    {
        owed = owed - 10 ;
        coins = coins + 1 ;
    }

    while (owed >= 5)
    {
        owed = owed - 5 ;
        coins = coins + 1 ;
    }

    while (owed >= 1) 
    {
        owed = owed - 1 ;
        coins = coins + 1 ;
    }

    printf("%i\n", coins) ;
}

2 个答案:

答案 0 :(得分:5)

您需要更改

float owed = GetFloat() ;

owed = GetFloat() ;

因为你有两个owed具有不同的范围。 (你没有改变外面的那个!)

修改

PS: 你可以改变一下:

while (owed >= 25)
{
    owed = owed - 25 ;
    coins = coins + 1 ;
}

int new_coins = ((int)owed)/25;
coins += new_coins;
owed = owed - 25.0f * new_coins;

答案 1 :(得分:1)

实际上你在这里有两个范围。主要功能范围和第一个循环块范围内。当您在循环块中更改声明的变量时,不会更改主函数的变量。

您的条件while (owed < 0)永远不会成立,因为主函数范围中的变量owed永远不会改变。

您不需要在循环中声明新变量,而是使用main函数中声明的变量,因此您需要删除float

while (owed < 0) 
{
    printf("O hai! How much change is owed?\n") ;
    owed = GetFloat() ;
    owed = owed * 100 ;
}