0

我正在尝试练习制作 if 语句,但运气不佳。现在我正在尝试使用 if 语句制作一个非常简单的三角计算器,但我无法让它工作。实际问题发生在输入三角函数(正弦、余弦、正切)之后。这就是发生的事情。
1. 我编译它
2. 它输出用户提示
3. 我输入函数并回车
4. 程序跳转到一个新的空白行
5. 没有任何反应,如果我按下回车,程序关闭

这是代码本身。如果我做了一些非常愚蠢的事情,请善待,我对 C 很陌生。

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

int main(void)
{
    float x;
    float a, o, h;
    float sine, cosine, tangent;

    printf("Enter the trig function you wish to calculate: ");
    scanf("%f", &x);

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

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

    if (x == cosine)
    {    printf("Enter the value of the adjacent leg: ");
         scanf("%f", &a);
         printf("Enter the value of the hypotenuse: ");
         scanf("%f", &h);

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

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

         tangent = o / a;
         printf("The tangent is equal to %f", tangent);
    }

    getch();
}

感谢所有真正有帮助并且对我缺乏理解的人并不粗鲁,我没有意识到我必须添加一个数字字符而不仅仅是一个字符。

4

4 回答 4

7

简单(最小)的修复

是的,你即将做一些经验丰富的程序员会称之为愚蠢的事情,但它们是新手会犯的那种错误(你既不是第一个也不是最后一个犯的错误)。

int main(void)
{
    float x;
    float a, o, h;
    float sine, cosine, tangent;

    printf("Enter the trig function you wish to calculate: ");
    scanf("%f", &x);

    if (x == sine)

主要问题是您没有给出sine,cosinetangent值,因此您不知道输入什么来使相等起作用。

第二个问题是比较浮点数是否相等不是一个好主意。

您可能最好使用以下方法:

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

    printf("Enter the trig function (0 = sine, 1 = cosine, 2 = tangent): ");
    scanf("%d", &x);

    if (x == sine)

这或多或少是正统的,读取和比较整数是否相等是可靠的。您必须更改操作,因为我已经抢占了 names sinecosinetangent作为枚举(整数)常量。您可以通过对常量使用大写名称(这是非常正统的)或使用名称前缀来解决这个问题,或者...

int main(void)
{
    int x;
    float a, o, h;
    float sine, cosine, tangent;
    enum { SINE, COSINE, TANGENT };

    printf("Enter the trig function (0 = sine, 1 = cosine, 2 = tangent): ");
    scanf("%d", &x);

    if (x == SINE)

更友好的输入

正如您可能从下面的评论中收集到的那样,最好允许用户输入他们想要输入的函数的名称,而不是让他们输入一个编码数字。可靠地编码有点棘手,这就是我使用数字在上面留下答案的主要原因。

#include <stdio.h>
#include <string.h>

int main(void)
{
    char line[4096];

    printf("Enter trig function you wish to calculate: ");
    if (fgets(line, sizeof(line), stdin) != 0)
    {
        char *nl = strchr(line, '\n');
        if (nl != 0)
            *nl = '\0';
        if (strcmp(line, "sine") == 0)
        {
            /* Process sine */
        }
        else if (strcmp(line, "cosine") == 0)
        {
            /* Process cosine */
        }
        else if (strcmp(line, "tangent") == 0)
        {
            /* Process tangent */
        }
        else
        {
            fprintf(stderr, "Unrecognized trig function (%s)\n", line);
        }
    }
}

4096 只是一个很大的整数,它是如此之长,以至于任何人都不太可能进入比这更长的行。如果他们确实输入了这样的一行,那么 GIGO 和他们将得到他们应得的(这将是一个礼貌的错误消息,表明他们输入的名称未被识别)。

这仍然不是美妙的代码。去除前导和尾随空格可能是合理的,并且可能会将输入大小写转换为小写,并且其中一条消息可能应该标识有效的函数名称。可能会重复代码循环,但是您需要一个函数来提示和读取响应等。所有这些都以牺牲更多代码为代价增加了可用性,这对于初学者来说不必要地使事情复杂化。

于 2012-12-30T02:48:49.550 回答
2

您的if语句不起作用,因为您正在将输入值x与尚未设置的浮点值进行比较。我想你想要做的是:

int x;
printf("Enter the trig function you wish to calculate\n");
printf("1=sine, 2=cosine, 3=tangent: ");
scanf("%d", &x);

if (x == 1)
{
    // do sine
}
else if (x == 2)
{
    // do cosine
}
else if (x == 3)
{
    // do tangent
}
else
{
    printf("I don't know that function.\n");
}

愚蠢至极?呐。当你第一次开始编程时,这是一个很容易犯的错误。坚持下去。我们都去过那里。

于 2012-12-30T02:49:09.307 回答
1

我不确定你从什么开始进入程序,但这就是你的错误所在。如果您正在输入一个字符数组(一个“字符串”),并且正在传递给x,则无法将其与浮点值进行比较。此外,您的sinecosinetangent变量没有值/没有被分配任何东西。要解决您的问题,请为您的变量分配一个数字,例如float sine = 1;并确保您在命令行中输入要传递给x的内容是一个数字。如果要输入“余弦”并将该值传递给x,则必须将x变量更改为 char 数组,例如char[] x = "",然后更改sine,cosinetangent变量也是字符数组。如果您确实将变量更改为数组,请记住&从 scanf 语句中删除 ,例如 -> scanf("%s", x);

于 2012-12-30T02:59:41.760 回答
1

现在,这段代码:

float x;
float a, o, h;
float sine, cosine, tangent;

printf("Enter the trig function you wish to calculate: ");
scanf("%f", &x);

if(x == sine)

...将一个值读入x,然后将其与 的当前值进行比较sine。不幸的是,您还没有初始化sine,所以它与一些未知的半随机值进行比较。

当您与 和 进行比较时cosinetangent您所做的更多相同。

这些比较都没有有意义的结果(例如,它们很可能都是真的)。

猜测一下,您可能希望用户输入一个字符串,然后将其与值"sine""cosine"和进行比较"tangent",使用strcmp

于 2012-12-30T02:48:45.297 回答