试图创建多个if-else条件

时间:2015-09-18 02:00:06

标签: c

我正在编写一个涉及检查日期有效性的程序。我已经设定了其中有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;
}

2 个答案:

答案 0 :(得分:2)

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

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

您测试指导您的代码进入您的第一个condicional。

    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给你的建议。 也许在同一个比较操作中使用数月和数天是一个好主意。

答案 1 :(得分:1)

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

  

int month = 1;   int day = 32;

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

  

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

然后它将检查内部if语句(是&gt; 0和&lt; 32?)

  

if(0

天== 32,所以它不会进入if并打印“SUCCESS”,它将退出if然后退出应用程序。如果您希望上面的数据输入失败条件,您可能需要以下内容:

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