在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>
答案 0 :(得分:5)
top_number
和bottom_number
被声明为float
,但您尝试将其打印为int
(%d
格式说明符告诉printf
将参数解释为类型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
没有任何好处,除非您可能需要表示分数。这是不可能的,因为你减去了两个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。
仍然不会很完美,因为你显示的“分数”不会减少到它的最小形式,但这是另一个项目,对吗?