gpt4 book ai didi

c - while 循环在不应该执行时出现问题 (c)

转载 作者:行者123 更新时间:2023-12-05 01:27:26 24 4
gpt4 key购买 nike

因此,作为计算机科学类(class)的一部分,我一直在学习一些 C。挑战之一是创建一个程序,该程序会告诉假设的收银员他们需要多少硬币才能找零顾客。我用一组 while 循环完成了这个,整个程序看起来像这样:

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

int main(void)
{
float f;
int i;
i=0;
do
{
f = get_float("Input Change: \n");
}
while(f<0);
// This do-while loop uses a get_float operator to get a postive input from the user.
while(f>=0.25)
{
f=f-0.25;
i=i+1;
}
// Each one of these loops represents using one kind of coin. For this one, every time it runs it adds
// one coin to the final tally and removes 25 cents from the change owed.
while(f>=0.10)
{
f=f-0.10;
i=i+1;
}
// Dime loop, subtracts ten from change owed.
while(f>=0.05)
{
f=f-0.0500000;
i=i+1;
}
// Nickel loop, subtracts five from change owed.
while(f>0)
{
f=f-0.01;
i=i+1;
}
// Penny loop, subtracts one from change owed.
printf("You need %i coins.%f\n", i, f);
//This just prints the number of coins needed.
}

问题是最后一个 while 循环我们随机执行,即使没有理由这样做。例如,$0.42 返回正确的值,而 $0.15 导致最后一个 while 循环无缘无故地添加额外的一分钱。

while(f>0)
{
f=f-0.01;
i=i+1;
}

(有问题的 while 循环)

我是一般编程的新手,所以这可能只是我做一些愚蠢的事情所带来的问题,但我不知道我到底做错了什么。有人遇到过这个吗?

最佳答案

这是一个精度问题。与 float 相等可能会出现问题。尽管理论上 f=0 当你到达最后一个循环时,这会失败,并进入循环。

可能的解决方法是将其更改为 00.01 之间的某个数字。例如

while(f>0.005)

但更好的方法是使用 int 类型来表示钱,每个单位对应一分钱。

关于c - while 循环在不应该执行时出现问题 (c),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53347203/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com