如果-否则循环以找到解决方案

If-else loop to find solution

本文关键字:解决方案 循环 如果      更新时间:2023-10-16

我的代码是:

#include<stdio.h>
void main(void)
{
    float timeLeavingTP;
    int transitNumber;
    float transitTime;
    printf("Please enter the time leaving TP.n");
    scanf_s("%f",&timeLeavingTP);
    printf("Please enter bus number.n");
    scanf_s("%d",&transitNumber);
    if(timeLeavingTP==1.00)
    {
        if(transitNumber==27)
        {
        transitTime=1.56;
        }
        else if(transitNumber==8);
        {
        transitTime=1.39;
        }
    }
    if(timeLeavingTP==6.30)
    {
        if(transitNumber==27)
        {
        transitTime=7.32;
        }
        else if(transitNumber==8)
        {
        transitTime=7.29;
        }
    printf("The time reached home is %fn",transitTime);
    }
}

调试后我得到了

Please enter the time leaving TP
1.00
Please enter bus number
27
Please enter to continue...

我的问题是如何调整程序以使其看起来像下面的程序。我犯了什么样的错误?

Please enter the time leaving TP
1.00
Please enter bus number
27
The time reached home is 1.56

提前感谢您的帮助!嗨,伙计们在包含 == 之后,我的调试仍然相同?我还有什么做错了什么吗?

1 部分:= vs ==

请注意:

if(timeLeavingTP=1.00)

不做你所期望的。它为时间分配 1.00 的离开TP。

您可能希望:

if(timeLeavingTP==1.00)

此外,请注意,此错误在您的程序中发生 6 次。

第 2 部分:比较浮点数

您的代码在这种情况下可能有效,但我不能 100% 确定它是否会起作用。通常很难直接比较 2 个浮点数,因为存储它们不准确(例如,0.1 通常不能在浮点中表示(。

大多数人通过以下几种方式之一解决此问题:

  1. 测试数字周围的范围。
  2. 转换为一些修复宽度格式。也许您可以将数字存储为整数,知道它的表示形式实际上是存储的数字的 0.01 *。
  3. 在这种情况下,您实际上可以将信息存储为字符串,并进行比较。

第 3 部分:条件语句

要编写适当的条件,它应该如下所示:

if (condition) {
    ...
} else if (condition) {
    ...
} else if (condition) {
    ...
} else {
    ...
}

您当然也可以嵌套条件:

if (condition) {
    if (condition) {
        ...
    } else {
        ...
    }
} else if (condition) {
    ...
}

例如,当你这样做时,你的代码会搞砸:

    } 
    else(transitNumber=8);
    {
        transitTime=1.39;
    }

请注意,else 语句不接受其后的条件。

第 4 部分:过多的分号

此外,请注意,在 else 和 if 语句之后没有分号。分号仅出现在大括号内。所以这个说法:

if(timeLeavingTP=6.30);

虽然语义上有效,但不会执行预期操作。您实际上想要删除该分号。

if(timeLeavingTP == 1.00)
{
    if(transitNumber == 27)
    {
       transitTime=1.56;
    }
    else if(transitNumber == 8)
    {
       transitTime=1.39;
    }
}
else if(timeLeavingTP == 6.30)
{
    if(transitNumber == 27)
    {
       transitTime == 7.32;
    }
    if(transitNumber ==8)
    {
        transitTime=7.29;
    }
}
 printf("The time reached home is %fn",transitTime);

}

if(transitNumber=27)
{
    transitTime=1.56;
}
else(transitNumber=8);
{
    transitTime=1.39;  //this line is executed all the time
}

此代码完全无效!
首先,你不比较任何东西... transitNumber = 27是一项作业。
第二else(transitNumber=8);,这是一个作业,应该else if(...). 同样; 和 意味着transitTime = 1.39(括号内(将始终发生,即使transitNumber != 8

更改

if(timeLeavingTP=1.00)  

if(timeLeavingTP==1.00)  

以便您可以正确比较时间离开TP。