【问题标题】:Attempting to create multiple if-else conditions尝试创建多个 if-else 条件
【发布时间】:2015-09-18 12:39:03
【问题描述】:

我正在编写一个涉及检查日期有效性的程序。我已经为有 31 天的月份设置了条件,我已经为有 30 天的月份设置了条件。因为闰年有问题,所以我省略了 2 月。

当我运行程序时,它能够在屏幕上打印所有有效日期的“SUCCESS”。但是,当我尝试输入无效日期时,程序无法在屏幕上写入“FAILURE”,正如我设置的那样[至少我相信]。

这里的代码有什么问题?

#include <stdio.h>

int main ()

{
    int month = 1;
    int day = 32;

        if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8
                || month == 10 || month == 12)
        {
            if (0 < day && day < 32)
                {
                return printf("%s","SUCCESS");
                }
        }
        else if (month == 4 || month == 6 || month == 9 || month == 11)
        {
            if (0 < day && day < 31 )
            {
                return printf("%s","SUCCESS");
            }
        }
        else
        {
            return printf("%s","FAILURE");
        }
    return 1;
}

【问题讨论】:

  • 推荐阅读:How to Debug Small Programs.
  • 解决此问题的另一种方法是从int success = 0; 开始,并将return printf("%s","SUCCESS"); 替换为success = 1;。并删除else{}。然后就在return 1; 之前,你可以这样做:if ( success ) printf("SUCCESS"); else printf("FAILURE");

标签: c


【解决方案1】:

您的代码有错误的流程,@JoshStir 是对的。

我可能知道当你输入一个条件语句时,同级的其他条件语句会被忽略。

你测试引导你的代码输入你的第一个条件。

    int month = 1;
    int day = 32;

    if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8
            || month == 10 || month == 12)
    {

        //--> Flow pass through here ( cause month == 1 )
        if (0 < day && day < 32)
            {
            //Flow DON'T pass through here ( cause day == 32)
            return printf("%s","SUCCESS");
            }

    }
    else if (month == 4 || month == 6 || month == 9 || month == 11)
    {

        //--> Flow DON'T pass through here ( cause flow ENTERER FIRST IF STATEMENT BEFORE)
        if (0 < day && day < 31 )
        {
            return printf("%s","SUCCESS");
        }
    }
    else
    {
        //--> Flow DON'T pass through here ( cause flow ENTERED FIRST IF STATEMENT BEFORE)
        return printf("%s","FAILURE");
    }

我建议您检查您的代码。 尝试重新思考并考虑@JoshStir 也给了你什么建议。 也许在同一个比较操作中使用几个月和几天是个好主意。

【讨论】:

    【解决方案2】:

    我们都是新人,所以我会尽可能清楚地回答您的问题。鉴于您的测试数据:

    int 月 = 1; 整数天 = 32;

    您的代码将输入第一个 if 语句(如 month == 1)

    如果 (月 == 1 || 月 == 3 || 月 == 5 || 月 == 7 || 月 == 8 ||月 == 10 ||月 == 12)

    然后它会检查内部 if 语句(是 day > 0 和

    如果 (0

    day == 32,所以它不会进入if并打印“SUCCESS”,它会退出if然后退出应用程序。如果你想让上面的数据进入失败条件,你会想要一些类似下面的东西:

    if ((month == 1 || month == 3 || month == 5 || month == 7 || month == 8|| month == 10 || month == 12) && (day > 0 && day < 32))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-31
      • 2014-09-06
      • 2015-04-21
      • 2018-11-07
      • 2016-08-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多