2016-02-13 3 views
-3

Я не понимаю, почему первый цикл не работает. Это бесконечный цикл, даже если заполненный поплавок, который заполняется, на самом деле больше 0. Почему цикл не работает?Loop in C. Первый цикл в программе не работает и бесконечен

#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) ; 
} 
+4

Где код для 'GetFloat()'? –

ответ

5

Вы должны изменить

float owed = GetFloat() ; 

в

owed = GetFloat() ; 

Как у вас есть два owed с различными областями. (Вы не меняя внешние один!)

EDIT

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; 
+0

Как я могу изменить внешний долг, а также убедиться, что отрицательное значение не может быть реализовано? –

+0

Просто сделайте исправление выше. Вы даже можете переместить умножение вне цикла. Заметка -ve * + ve = -ve –

+0

спасибо за вашу помощь, я понял, что все остальное. Код работает сейчас :) –

1

На самом деле у вас есть два сфер Вот. Основная область функций и внутри вашей области цикла. Когда вы изменяете объявленную переменную внутри блока цикла, вы не изменяете переменную вашей основной функции.

Ваше состояние while (owed < 0) никогда не будет истинным, потому что ваша переменная owed в области основной функции никогда не изменится.

Вы должны не объявить новую переменную в цикле, но использовать переменную, объявленную в главной функции, так что вам нужно удалить float:

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

Благодарим за помощь. Я думал, что проблема может быть связана с этим. Но если я избавлюсь от первого определения задолженности, чем в остальной части моего кода (который также находится за пределами цикла), задолженность больше не определяется. Есть ли способ, которым я могу сделать такой цикл, а затем все еще могу использовать данный float вне этого цикла? –