gpt4 book ai didi

c - C 中的脚本未正确添加 float

转载 作者:太空宇宙 更新时间:2023-11-04 01:17:44 25 4
gpt4 key购买 nike

这是我第一次在这里发帖,所以这篇帖子可能有点乱,但我会尽力解释所有内容。

我必须制作一个类似于商店自助结账的程序。但是,当人们将钱投入机器时,我遇到了两个问题。人们这样投钱:10 20 50 0.10 .... 支付以 0 结尾或使用 ctrl+d。(人们只能使用此值的硬币:100、50、20、10、5、2、1、0.50、0.20、0.10、0.05、0.02 和 0.01,如您在代码中所见)

那么当我以 0 结束付款时程序正常退出。(像这样:50 20 0)

但是,当我用 ctrl+d 结束它时,它会导致无限循环,我不明白为什么。

第二个问题是,出于某种原因,它不会添加 0.10、0.20 等数字。有什么想法可以解决这个问题或可能导致错误的原因吗?

不要介意中间的 printf,我只是在检查值。

float bill,x,payment=0,k=0;



printf("coins ");
while(k==0)
{
scanf("%f", &x);
if(x==0 )
{
goto END;
}

if(x ==100 || x ==50 || x ==20 || x ==10 || x ==5 || x ==2 || x ==1 || x ==0.50 || x==0.10 || x ==0.20 || x ==0.05 || x ==0.02|| x ==0.01 )
{
payment += x;
printf("==============");
printf("%.2f \n",payment);
}

else{
printf("%.2f is invalid",x);
k = 1;
goto END2;
}
}
END:
printf("%.2f \n", payment);

END2:
return 0;

最佳答案

当您在终端中发送 Ctrl+D 时,您向 stdin 注册了一个 EOF 字符,因此 scanf 将不再读取任何内容,并且 x 将永远不会设置为 0,因此您不会逃脱循环。

您需要检查 scanf 的结果,阅读 man scanf 您会发现如果成功则返回值 > 0。

if (scanf("%f", &x) < 1 || x = 0) // Check return value of scanf, then check x
GOTO: END;

编辑:请注意,如果 scanf 正在读取输入项,您需要检查 scanf 的返回值是否不少于输入项的数量。

关于c - C 中的脚本未正确添加 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53462772/

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