我正试图找到在C中以恒定速度行进输入距离所花费的时间。代码我有功能但输出打印为0?什么出了什么问题?
#include <stdio.h>
#include <stdlib.h>
int main() {
int distance, speed = 80;
float time;
// This is how to read an int value
printf("Please enter a distance in kilometers to be covered at 80KPH. \n");
scanf("%d", & distance);
printf("You typed: %d\n", distance);
printf("\n");
time = distance / speed;
printf("It will take you %.2f to cover ", time);
}
答案 0 :(得分:8)
因为两个操作数是整数,所以编译器会生成整数除法的代码。但你想要真正的分裂。因此,将一个或多个操作数强制转换为浮点类型,编译器将发出实际除法的代码。
time = (float) distance / time;
整数分工是你在小学学到的。因此,例如,11/3是3余数2。在C中,表达式11/3的计算结果为3.这是整数除法。在你的情况下,似乎分子(距离)小于分母(时间),因此表达式
distance / time
评估为0。
这是由除法运算符重载引起的常见混淆。如果两个操作数都是整数,则此运算符表示整数除法,否则为实数除法。
要学习的关键点是操作数的类型决定是使用整数还是实数除法。存储结果的变量类型对此选择没有影响。
答案 1 :(得分:3)
更改
time = distance / speed;
到
time = (float) distance / speed;
你正在进行整数除法而不是浮点除法。
答案 2 :(得分:0)
根据其他人所说的内容(强制转换为浮动或双重转换)更改代码后,您还需要将格式说明符从“%d”更改为“%f”以显示浮点数(无论如何)浮动或双重),否则你会在输出中看到垃圾。
编辑:很抱歉混淆了这一点。我想到了一个修复,你将速度和距离定义为float而不是int。在这种情况下,您可以简单地将“int”转换为“float”,将“%d”转换为“%f”(可能具有精确度和/或舍入标志)。但是,这将改变程序的工作方式(因为用户现在可以输入非整数值),因此它可能不是您想要的。