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