if-else循环找到解决方案

时间:2014-08-12 14:45:55

标签: c++ loops if-statement

我的代码是:

#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 %f\n",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

提前感谢您的帮助! 包括==后我们的调试仍然一样吗?还有别的我做错了吗?

4 个答案:

答案 0 :(得分:5)

第1部分:= vs ==

请注意:

if(timeLeavingTP=1.00)

不按预期行事。它将timeLeavingTP指定为1.00。

你可能想要:

if(timeLeavingTP==1.00)

此外,请注意您的程序中出现此错误6次。

第2部分:比较浮点数

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

大多数人通过以下几种方式解决这个问题:

  1. 测试数字周围的范围。
  2. 转换为某些修正宽度格式。也许您可以将数字存储为整数,知道它的表示实际上是0.01 *存储的数字。
  3. 在这种情况下,您实际上只需将信息存储为字符串,然后进行比较。
  4. 第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);
    

    虽然在语义上有效,但没有达到预期效果。你实际上想要删除那个分号。

答案 1 :(得分:3)

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 %f\n",transitTime);

}

答案 2 :(得分:2)

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(括号内)也会一直发生

答案 3 :(得分:1)

更改

if(timeLeavingTP=1.00)  

if(timeLeavingTP==1.00)  

这样您就可以正确地比较timeLeavingTP。