gpt4 book ai didi

c - float 未正确转换

转载 作者:行者123 更新时间:2023-11-30 21:21:00 24 4
gpt4 key购买 nike

我正在开发一个将美元转换为美分的程序。我使用预定义函数将用户输入作为 float 接收,然后尝试将此 float 乘以 100,但它给出了一个不正确的值。代码如下:

printf("Change in dollars: ");
change= GetFloat();
cents= round(change*100);
printf("Cents is %f",cents);

这是一个逻辑错误,因为程序运行良好,但数学上有问题,例如,如果我在提示时输入 1.50,则得到的返回结果是 1004,这显然是错误的。我想要发生的是输出 150。

最佳答案

这很可能是因为您有一些区域设置,其中小数点分隔符是 , 而不是 .,而且您很可能不检查 的返回值>scanf()这是大多数书籍和几乎每个教程所做的”,那么变量没有被初始化,而您打印的内容是程序布局的结果用户输入的值。

为了验证我所说的,我建议不加修改地编译相同的程序,但使用不同的编译标志。

你必须做的是确保输入正确,试试这个

float GetFloat(int *ok)
{
float value = 0;
if (scanf("%f", &value) != 1)
*ok = 0;
else
*ok = 1;
return value;
}

你会这样称呼

int   result = 0;
float change = GetFloat(&result);
if (result == 0)
return -1;
float cents = round(change * 100);

printf("Cents is %f",cents);

如果小数点分隔符有问题,上面的程序将不会输出任何内容,因为 scanf() 将返回 0,因此 ok 调用该函数后将为 0

忽略非 void 函数的返回值的一个重要后果是,如果该值没有像在 scanf() 的情况下那样初始化,并且您不这样做不知道因为你没有检查返回值,那么就会发生未定义的行为,这意味着你的程序将包含很难发现并因此很难修复的错误。

关于c - float 未正确转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31049391/

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