c - 我的程序输出错误值和未知错误
问题描述
这是我试图为我的初学者编程课解决的问题。我需要输入零钱并计算我需要返还多少硬币。
这是我的代码:
int main(void)
{
//prompts user for amount of change and check the value of the imput
int n = get_float("enter change owned: ");
//converts to p.
int change = n * 100;
if ( change > 0)
{
printf("total change is: %ip\n" , change );
}
else
{
printf(" ERROR: change given needs to be positive value!\n");
}
while(n < 0);
int i = 0;
//calculate quarters
while (change >= 250)
{
n = change - 250;
i++;
}
//calculate dimes
while (change >= 100)
{
n = change - 100;
i++;
}
//calculate nickels
while (change >= 50)
{
n = change - 50;
i++;
}
//calculate pennies
while (change >= 1)
{
n = change - 1;
i++;
}
printf("%d\n", i);
}
我不明白为什么当我输入 n = 2.50 并且程序需要将变化计算为 n = n *100 时,它输出结果为 200 :S。我的程序也可以编译,但是当我运行它时,我得到以下消息:运行时错误:有符号整数溢出:2147483647 + 1 不能用“int”类型表示
谢谢你!
解决方案
int n = get_float("enter change owned: ");
它将浮点数转换为整数,因此 2.4 变为 2。更改为:
float n = get_float("enter change owned: ");
你也可能想检查这一行:
printf("total change is: %ip\n" , change );
打印出我建议的整数:
printf("total change is: %d\n" , change );
推荐阅读
- javascript - 反应子函数参数proptype检查
- laravel - 提供的应用 ID 看起来不像是有效的应用 ID。拉拉维尔
- azure-devops - 未找到 ILMerge 任务 - Azure DevOps Build Pipeline
- aspnetboilerplate - 有没有办法通过实体历史获取实体的所有更改?
- vba - 如果符合某些条件,VBA 在变量前添加一个数字
- r - 将栅格转换为点形状文件
- python - 如果 Scrapy Spider 的条件
- ruby - 域对象是否应该由事件处理程序聚合创建
- jquery - 当表格单元格太长时,有什么方法可以减少表格单元格中的文本?
- c# - ASP.net web 方法,重写 URL