मैं साल प्राप्त कर रहा में दिनों की संख्या का निर्धारण, महीने आदानों के रूप में और दिन और मैं एक कुशल तरीके से आदानों मान्य करने के लिए कोशिश कर रहा हूँ। वर्ष रेंज [0-99] (0,4,8 .. लीप वर्ष माना जाता है), महीने रेंज [1-12] और दिन रेंज [1-31]।एक महीने
दिन मान्य के सीधे आगे रास्ता निम्नलिखित होगा:
if((Day<1u) || (Day>31u)){
/*error*/
}
else if ((Month==4u) || (Month==6u) || (Month==9u) || (Month==11u) && (Day>30u)){
/*error*/
}
else if ((Month==2u) && (Year % 4u == 0u) && (Day > 29u)){
/*error*/
}
else if ((Month==2u) && (Year % 4u != 0u) && (Day > 28u)){
/*error*/
}
else
{
/*valid*/
}
लेकिन यह एक उच्च जटिलता है।
एक लुकअप तालिका एक बेहतर विकल्प की तरह लगता है। और अब सवाल:
इस मामले निम्नलिखित के अलावा अन्य के लिए तालिका बनाने के लिए एक अधिक कुशल तरीका है?
const int testTable[4][12] = {
{31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
};
if(testTable[ Year % 4 ][ Month - 1 ] >= Day){
/*valid*/
}
else{
/*error*/
}
क्या कोई और नियम है जिसे मैं नहीं देख रहा हूं?
से बच सकते हैं क्या यह एम्बेडेड सिस्टम के साथ क्या करना है? मैं टैग हटा दूंगा। – Lundin
आप पहले से ही Y2K के सबक भूल गए हैं? या जब आप ऐसा हुआ तो आप चारों ओर नहीं थे? साल के लिए दो अंकों का उपयोग लंबे समय तक दुखी होने के लिए एक नुस्खा है। उदाहरण के लिए, 2100 एक छलांग वर्ष नहीं है, और न तो 1 9 00 था, हालांकि 2000 था। करुणा के लिए, 4 अंकों के वर्षों का उपयोग करें! –
यह बदतर बनाने के लिए, आप 400 –