और यदि या कथन में ऑपरेटर

मैंने आपके डीओबी को प्रदर्शित करने वाले जन्म कार्यक्रम की तारीख बनाई है, यह लीप वर्षों में कारक भी होगी ताकि यदि आप वर्ष 1 99 5, 2 महीने, 2 9 वर्ष में प्रवेश करते हैं, तो यह एक त्रुटि के माध्यम से होगा क्योंकि यह एक लीप वर्ष नहीं था। यह हर महीने कितने दिनों में होता है और यह वह हिस्सा है जिसके साथ मैं सहायता चाहता हूं। वर्तमान में, यह इस प्रकार है:

           if (month == 1/&& day > 31)
            {
                Console.WriteLine("January only has 31 days - Enter again");
                validDay = false;
            }
            else if (day >= 29 && !IsLeapYear(year) && month == 2)
            {
                Console.WriteLine("You were not born on a leap year or February only has 28 days - Enter again");
                validDay = false;
            }
           //And so on for each month

इसलिए मैंने इसे इस तरह से आजमाया:

if (month == 1 || month == 3 || month == 5 || month == 7 || 
                month == 8 || month == 10 || month == 12 && day > 31)
            {
                Console.WriteLine("Your birth month only has 31 days - Enter again");
                validDay = false;
            }
            else if (day >= 29 && !IsLeapYear(year) && month == 2)
            {
                Console.WriteLine("You were not born on a leap year or February only has 28 days - Enter again");
                validDay = false;
            }
            else if (month == 3 || month == 6 || month == 9 || month == 11 && day > 30)
            {
                Console.WriteLine("Your birth month only has 30 days - Enter again");
                validDay = false;
            }

And for some reason it will always throw the error message even if you enter 1997, 5, 28. The month chosen in 5 but the day is not > 31 so why does it do this? I'm also open up to different ways to do this because I have a feeling there's another way - arrays maybe?

2
धन्यवाद दोस्तों, ब्रांड्स का उपयोग कर समस्या तय की। मैंने इसे डेट टाइम का उपयोग करने के लिए भी बदल दिया लेकिन मैंने सोचा कि इस तरह के इस्तेमाल से प्रोग्राम बनाने से मजा आए। फिर भी इसमें से दो नई चीजें ली गईं, इसलिए फिर से धन्यवाद :)
जोड़ा लेखक Dan Scott, स्रोत
यह काम करता है: यह कार्य करता है: सार्वजनिक स्थैतिक बूल IsLeapYear (int वर्ष) {if (वर्ष% 4 == 0 || वर्ष% 100 == 0 और वर्ष% 400 == 0) सत्य वापस आना; और झूठी वापसी; }
जोड़ा लेखक Dan Scott, स्रोत
क्या आप सही ढंग से सदी लीप साल संभालते हैं? एक DateTime.DaysInMonth है विधि जो कोड के इस बदसूरत ब्लॉक को गायब कर देगा (और इसमें छिपी हुई बग को हल करें)।
जोड़ा लेखक 48klocs, स्रोत
क्योंकि आपका और केवल अंतिम OR पर लागू किया जा रहा है।
जोड़ा लेखक Ally, स्रोत

4 उत्तर

मैं आपको DateTime.TryParse का उपयोग करने की अनुशंसा करता हूं - यह स्वचालित रूप से सभी तिथियों को मान्य करेगा, फिर आप उपयोगकर्ता को "अमान्य तिथि" जैसी कुछ वापस कर सकते हैं।

1
जोड़ा

मैं डेटटाइम का उपयोग करने की अनुशंसा करता हूं। TrojanParseExact निम्नानुसार है ...

string year = "1997";
string month = "5";
string day = "28";
string dateText = string.Format("{0}/{1}/{3}", year, month, day);
DateTime date;

if (!DateTime.TryParseExact(dateText, "yyyy/MM/dd", null, DateTimeStyles.None, out date))
{
    Console.WriteLine("Date is invalid");
}

शुभ लाभ!

0
जोड़ा

ऑपरेटरों के पास प्राथमिकता आदेश कहा जाता है। जिस प्राथमिकता को आप प्राप्त करना चाहते हैं उसे प्राप्त करने के लिए कोष्ठक का उपयोग करने का प्रयास करें।

0
जोड़ा

डेटटाइम का उपयोग क्यों न करें। ट्राईपर्स।

कृपया निम्न लिंक पर भी एक नज़र डालें:

डाटाबेस में डालने से पहले दिनांक (लीप वर्ष या नहीं) मान्य करना

सी # में डेटटाइम मान्य करें

0
जोड़ा