1

在 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>

4

2 回答 2

5

top_number并且bottom_number被声明为,float但您尝试将它们打印为int%d格式说明符告诉printf将参数解释为 type int)。 int并且float有不同的大小和位表示,所以这不起作用。

有许多选项可以解决此问题。您可以将它们更改为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除非您可能需要表示分数,否则使用没有任何好处。这是不可能的,因为你要减去两个ints。然而,斜率 ( top_number/bottom_number) 的计算应视为float

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

while (scanf("%d", &one_y) != 1);
// repeat this pattern for each scanf call
于 2013-05-08T14:06:29.497 回答
1

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

但是……为什么你需要花车?您正在减去整数,因此您的答案将是整数。将 top_number 和 bottom_number 的类型更改为 int。

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

于 2013-05-08T14:11:05.703 回答