我正在制定一项将美元兑换成美分的计划。我使用预定义函数将用户输入作为浮点数接收,然后我尝试将此浮点数乘以100,但它给出了一个不正确的值。下面是代码:
{{1}}
这是一个逻辑错误,因为程序运行正常,但数学有问题,例如,如果我在提示时输入1.50,我得到的回报是1004,这显然是错误的。我想要发生的是150输出。
答案 0 :(得分:2)
这很可能是因为您有一些小数点分隔符为,
而不是.
的区域设置,并且因为您很可能不会检查scanf()
&#34的返回值; 这是大多数书籍所做的,几乎每个教程",然后变量没有被初始化,你打印的是你的程序布局的结果,而不是由inputed by用户。
为了验证我说的内容,我建议不加修改地编译同一个程序,但使用不同的编译标记。
你必须做的是确保输入正确,试试这个
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()
函数的返回值的一个重要结果是,如果未使用operator >>
初始化该值,并且您不知道因为您没有检查返回值,然后会出现未定义的行为,这意味着您的程序将包含很难找到的错误,因此很难修复。