-4

所以昨晚我问了一个关于我试图为练习而做的三角计算器的问题,我又回来了,这个问题与我的上一个问题非常相关。自昨晚以来,我已经修复了计算器,但出于某种奇怪的原因,其中一个 if 语句通过了针对不同 if 语句的测试。这是我的代码-

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()
{
int x;
float o, h, a, S, C, T;
enum { sine, cosine, tangent};

printf("Enter the value for the function you wish to calculate\n(Sine = 0 Cosine = 1  Tangent = 2): ");
scanf("%f", &x);

if(x == 0)
{
    printf("Enter the value of the opposite leg: ");
    scanf("%f", &o);
    printf("Enter the value of the hypotenuse: ");
    scanf("%f", &h);

    S = o / h;
    printf("The sine is equal to %f", S);
}

else if(x < 2, x > 0)
{
    printf("Enter the value of the adjacent leg: ");
    scanf("%f", &a);
    printf("Enter the value of the hypotenuse: ");
    scanf("%f", &h);

    C = a / h;
    printf("The cosine is equal to %f", C);
}

else if(x == 2)
{
    printf("Enter the value of the opposite leg: ");
    scanf("%f", &o);
    printf("Enter the value of the adjacent leg");
    scanf("%f", &a);

    T = o / a;
    printf("The tangent is equal to %f", T);
}
else
{
    printf("Wat da fack");
}

return 0;


}  

发生的情况是余弦测试通过了切线并且切线函数不起作用。和以前一样,我对此还是很陌生,所以请放轻松。顺便说一句,我有两个余弦测试条件的原因是,除非我有这样的条件,否则它不会运行,对此表示赞赏也。

4

3 回答 3

4

if (x < 2, x > 0)不按你的想法做。应该是if (x<2 && x>0);阅读C中的逗号运算

如果您编译时使用了所有警告和调试信息(例如使用gcc -Wall -g),您可能会收到警告。您应该学习如何使用调试器(例如gdb在 Linux 上)。

编译器(至少 GCC)应该警告你scanf("%f", &x);where xis some int。您可能想要scanf (" %d", &x);并且您可能想要测试结果scanf(它为您提供成功读取元素的数量)。

您很可能需要printf用换行符(例如代码printf("Enter the value of the opposite leg:\n");)结束每个格式字符串 - 或者经常调用 -fflush你最好在scanf格式字符串中放置一个空格,例如scanf(" %f", &a)

于 2012-12-31T08:25:46.640 回答
2

正如其他人所提到的,问题似乎出在您的第二个else if()陈述中。基本上发生的事情是两个语句x < 2x > 0被执行,但仅x > 0用于测试条件。因此,余弦函数的测试也将通过正切函数 ie cosine > 0tangent > 0并且永远不会执行正切函数的测试。

执行比较的更好方法是使用仅测试是否x == 1可以使用else if(x > 0 && x < 2)

于 2012-12-31T08:53:56.937 回答
2

scanf("%f", &x);, 替换%f%d因为xint, 但这不是主要问题,

问题在于if陈述条件,

comma(,)不用于AND目的,你必须使用&&,,所以你的状态变成,

if ((x < 2) && (x > 0))

编辑

当您从用户那里获取时,请替换%f%din ...scanfx

scanf("%d", &x);这将解决您的问题。

于 2012-12-31T08:31:19.263 回答