为啥我的 C 程序不能正常工作?
Posted
技术标签:
【中文标题】为啥我的 C 程序不能正常工作?【英文标题】:Why is my C program not working correctly?为什么我的 C 程序不能正常工作? 【发布时间】:2020-03-18 12:17:18 【问题描述】:这是我的程序:
int main()
struct Koordinaten
float x;
float y;
Vektor[3];
typedef struct Koordinaten Koordinaten;
float A[3], s, b;
for(int i = 0; i < 3; i++)
char d;
if(i == 0)
d = 'A';
if(i == 1)
d = 'B';
if(i == 2)
d = 'C';
printf("Please enter the coordinates of the %c vector:\nx: ", d);
scanf("%f", &Vektor[i].x);
printf("\ny: ");
scanf("%f", &Vektor[i].y);
printf("Values of the %c vector x: %f y: %f\n\n", d, Vektor[i].x, Vektor[i].y);
A[i] = sqrt(Vektor[i].x * Vektor[i].x + Vektor[i].y * Vektor[i].y);
printf("The length of the vector %c is: %f\n\n", d, A[i]);
s = 1/2 * (A[0] + A[1] + A[2]);
printf("s = %f\n", s);
b = sqrt(s * (s - A[0]) * (s - A[1]) * (s-A[2]));
printf("The area is: %f", b);
如您所见,我想取三个向量并给出向量的面积。它完美地工作,因为与 s 变量的行。我的程序只给我 s 的值 0,但它必须是 7.5!
【问题讨论】:
请输入,预期输出和实际输出。 将s = 1/2 * (A[0] + A[1] + A[2]);
更改为 s = 1/(2 * (A[0] + A[1] + A[2]));
char d; if(i == 0) d = 'A'; if(i == 1) d = 'B'; if(i == 2) d = 'C';
-> char d = 'A' + i;
非常感谢大家我发现了错误。
作为关于命名的一般评论,我建议与大写之类的东西保持一致,例如,您的Vektor
是一个数组,但样式与Koordinaten
相同,这是一个类型。此外,大多数单字符名称(s
、b
)可以变得更长、更具描述性,尤其是s
乍一看可能暗示它是“某个字符串”。
【参考方案1】:
在您的代码中
s = 1/2 * (A[0] + A[1] + A[2]);
与
相同 s = (1/2) * (A[0] + A[1] + A[2]);
^^^^^^--------------------------This is an integer division, with a result 0,
so, 's' will always have a value 0.
您需要将其更改为
s = 1.0/2 * (A[0] + A[1] + A[2]);
^^^^^^-----------------------------now this is floating point division.
确保浮点除法。
【讨论】:
或者只是s = .5 * (A[0] + A[1] + A[2]);
。
@glglgl 当然,只是想保持相同的语法,以便问题更加明显。 :)
关于表达式:1.0/2
这是一个double
除法,这不是我们想要的。建议:1.0f/2.0f
以上是关于为啥我的 C 程序不能正常工作?的主要内容,如果未能解决你的问题,请参考以下文章