C斜坡发现者返回奇怪的数字

时间:2013-05-08 14:04:38

标签: c

在C中,我试图创建一个找到斜率的程序,以便更多地了解它作为一种语言。我创建了6个变量来保存所需的信息:

//variables

int one_x;
int one_y;

int two_x;
int two_y;

float top_number;
float bottom_number;

然后,我为用户创建了一种输入信息的方法。

printf("------------------\n");

printf("Enter the first x coordinate.\n");
printf(">>>  \n");
scanf("%d", &one_x);

printf("Enter the first y coordinate.\n");
printf(">>>  \n");
scanf("%d", &one_y);


printf("------------------\n");

printf("Enter the second x coordinate.\n");
printf(">>>  \n");
scanf("%d", &two_x);

printf("Enter the second y coordinate.\n");
printf(">>>  \n");
scanf("%d", &two_y);

最后,该程序解决了问题并显示了答案。

bottom_number = two_x-one_x;

top_number = two_y - one_y;

printf ("The Slope is %d/%d", top_number, bottom_number);

但是,无论何时运行它都会返回奇怪的数字:

1606415936/1606415768

为什么会这样?

我正在使用xcode和#include <stdio.h>

2 个答案:

答案 0 :(得分:5)

top_numberbottom_number被声明为float,但您尝试将其打印为int%d格式说明符告诉printf将参数解释为类型int)。 intfloat具有不同的大小和位表示,因此不起作用。

有很多选项可以解决这个问题。您可以将其更改为int

int top_number;
int bottom_number;

或将最终printf中的格式说明符更改为%f

printf ("The Slope is %f/%f", top_number, bottom_number);

或投放printf

中的值
printf ("The Slope is %d/%d", (int)top_number, (int)bottom_number);

请注意,使用float没有任何好处,除非您可能需要表示分数。这是不可能的,因为你减去了两个int。但是,斜率(top_number/bottom_number)的计算应视为float

最后,正如前面提到的hmjd,您应该真正检查scanf的返回值,以确保在每次调用后实际读取int

while (scanf("%d", &one_y) != 1);
// repeat this pattern for each scanf call

答案 1 :(得分:1)

您正在使用printf使用整数占位符%d显示浮点数。您需要使用%f来显示浮动。

但是......为什么你需要漂浮在这里?你正在减去整数,所以你的答案将是整数。将top_number和bottom_number的类型更改为int。

仍然不会很完美,因为你显示的“分数”不会减少到它的最小形式,但这是另一个项目,对吗?