我不明白为什么第一个循环不起作用。即使填充的欠款浮动实际上大于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) ;
}
答案 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 ;
}