浮动未正确转换
Float not being converted correctly
我正在开发一个将美元转换为美分的程序。我使用预定义函数将用户输入作为浮点数接收,然后我尝试将此浮点数乘以 100,但它给了我一个不正确的值。代码如下:
printf("Change in dollars: ");
change= GetFloat();
cents= round(change*100);
printf("Cents is %f",cents);
这是一个逻辑错误,因为程序运行良好,但数学有问题,例如,如果我在提示时输入 1.50,我得到的 return 是 1004,这显然是错误的。我想要发生的是输出 150。
这很可能是因为您在某些区域设置中小数点分隔符是 ,
而不是 .
,而且您很可能没有检查 [=] 的 return 值14=]“大多数书和几乎所有教程都这样做”,那么变量没有被初始化,你正在打印的是程序布局的结果,而不是用户输入的值。
为了验证我所说的,我建议不修改但使用不同的编译标志编译相同的程序。
你必须做的是确保输入正确,试试这个
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()
将 return 0
,因此 ok
将是 0
调用函数后。
忽略非 void
函数的 return 值的一个重要后果是,如果该值未像在本例中使用 scanf()
那样初始化,而您不这样做知道因为你没有检查 return 值,然后 未定义的行为 将会发生,这意味着你的程序将包含很难找到的错误,因此很难找到修复。
我正在开发一个将美元转换为美分的程序。我使用预定义函数将用户输入作为浮点数接收,然后我尝试将此浮点数乘以 100,但它给了我一个不正确的值。代码如下:
printf("Change in dollars: ");
change= GetFloat();
cents= round(change*100);
printf("Cents is %f",cents);
这是一个逻辑错误,因为程序运行良好,但数学有问题,例如,如果我在提示时输入 1.50,我得到的 return 是 1004,这显然是错误的。我想要发生的是输出 150。
这很可能是因为您在某些区域设置中小数点分隔符是 ,
而不是 .
,而且您很可能没有检查 [=] 的 return 值14=]“大多数书和几乎所有教程都这样做”,那么变量没有被初始化,你正在打印的是程序布局的结果,而不是用户输入的值。
为了验证我所说的,我建议不修改但使用不同的编译标志编译相同的程序。
你必须做的是确保输入正确,试试这个
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()
将 return 0
,因此 ok
将是 0
调用函数后。
忽略非 void
函数的 return 值的一个重要后果是,如果该值未像在本例中使用 scanf()
那样初始化,而您不这样做知道因为你没有检查 return 值,然后 未定义的行为 将会发生,这意味着你的程序将包含很难找到的错误,因此很难找到修复。