Я только начал изучать C. Я пишу программу, которая возвращает клиенту сдачу в четвертаках, пятаках, десятицентовиках и пенни. По какой-то причине, когда цикл while
достигает 0, он не прерывается.
EDIT: Этот вопрос очень похож на другой вопрос, уже заданный на SO (Is математика с плавающей запятой не работает?). Я бы оставил этот вопрос для тех, кто ищет ответы относительно цикла while, таких как я, кто понятия не имел, что число с плавающей запятой вызывает бесконечный цикл while.
#include <stdio.h>
#include <cs50.h>
int main(void){
float val;
int quarters = 0;
int dimes = 0;
int nickels = 0;
int pennies = 0;
printf("How much change is due?: \n");
val = GetFloat();
while (val > 0){
if (val >= 0.25){
quarters += 1;
val -= 0.25;
}
else if (val >= 0.1) {
dimes += 1;
val -= 0.1;
}
else if (val >= 0.05){
nickels += 1;
val -= 0.05;
}
else if (val >= 0.01){
pennies += 1;
val -= 0.01;
}
printf("%f \n", val);
}
printf("Quarters: %i\n", quarters);
printf("Dimes: %i\n", dimes);
printf("Nickels: %i\n", nickels);
printf("Pennies: %i\n", pennies);
return 0;
}
Любые предложения о том, как обращаться?
0.1
), невозможно представить без потерь. Что в итоге печатает? - person unwind   schedule 08.09.20160.000000
. Я обычно тестирую ввод с .41 . Хотя я только что проверил с .50 и .75, и эти числа работают, как и ожидалось. - person Ctpelnar1988   schedule 08.09.2016val
- см. stackoverflow.com /вопросы/12761493/ - person 4386427   schedule 08.09.2016float
добавляйтеf
в конец числа, иначе код фактически использует значенияdouble
. Примечание:0
не является значением с плавающей запятой, вместо него используйте0.0f
. - person user3629249   schedule 09.09.2016