मुझे अपने प्रोग्राम में विकल्पों में से एक के साथ समस्या है जिसमें विकल्प 1, शब्दकोश में एक नया छात्र जोड़ने के बाद, प्रोग्राम को उपयोगकर्ता को फिर से किसी अन्य विकल्प के लिए संकेत देना चाहिए, लेकिन इसके बजाय प्रोग्राम स्वचालित रूप से अंतिम पूर्णांक के इनपुट को संग्रहीत करता है ( जोड़े गए छात्र के अंक) और अगले विकल्प के लिए इनपुट के रूप में लेता है। यह केवल विकल्प 1 के साथ होता है, अन्य ठीक हैं। ऐसा क्यों है और मैं इसे कैसे बदल सकता हूं? आपको धन्यवाद!

मेरा कोड नीचे जैसा है:

static void Main(string[] args)
    {
        //initialize menu
        string Menu = @"1. Add a new student to the dictionary
2. Display all students in the dictionary
3. Remove an existing student from the dictionary
4. Modify an existing student's marks from the dictionary
0. Quit this program
";



        //initialize student list
        Dictionary<string, int> nameList = new Dictionary<string, int>();
        nameList.Add("Cindy", 76);
        nameList.Add("Kevin", 68);
        nameList.Add("Sean", 74);
        nameList.Add("Lucy", 63);
        nameList.Add("Sarah", 89);
        nameList.Add("Melvin", 80);

        bool b = true;

        while (b == true)
        {


            Console.Write(Menu);

            Console.WriteLine();

            //prompt user selection
            Console.Write("Select an option: ");
            int select = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Option " + select + " is selected");
            Console.WriteLine();

            if (select > 0)
            {
                switch (select)
                {
                    case 1:
                        Console.Write("Enter the name of the new student: ");
                        string newName = Console.ReadLine();
                        Console.Write("Enter the marks of " + newName + ": ");
                        int newMark = Convert.ToInt32(Console.Read());
                        nameList.Add(newName,newMark);

                        Console.WriteLine(newName + " is added to the list");
                        Console.WriteLine();
                        break;

                    case 2:
                        Console.WriteLine("No   Name        Marks");
                        int j = 1;
                        foreach (KeyValuePair<string, int> kvp in nameList)
                        {

                            Console.WriteLine(j + "    " + kvp.Key + "        " + kvp.Value);
                            j++;
                        }
                        Console.WriteLine();
                        break;


                    case 3:
                        Console.Write("Enter the name of the student to be removed: ");
                        string bye = Console.ReadLine();

                        nameList.Remove(bye);
                        Console.WriteLine(bye + " has been removed from the list");
                        Console.WriteLine();
                        break;

                    case 4:
                        Console.Write("Enter the name of the student to modify marks: ");
                        string change = Console.ReadLine();
                        Console.Write("Enter the new marks for " + change + ": ");
                        int changemark = Convert.ToInt32(Console.ReadLine());
                        nameList[change] = changemark;
                        Console.WriteLine("Marks for " + change + " has been updated to " + changemark);
                        Console.WriteLine();
                        break;

                    default:
                        Console.WriteLine("Invalid input!");
                        Console.WriteLine();
                        break;
                }

            }

            else if (select == 0)
            {   //case 0:
                Console.WriteLine("Bye!");
                Console.ReadLine();
                return;
            }
        }

    }

और यहाँ ऊपर बताई गई समस्या का एक स्क्रीनशॉट है: यहां छवि विवरण दर्ज करें

2
Rou Jie Ooi 26 अप्रैल 2017, 03:55

2 जवाब

सबसे बढ़िया उत्तर

क्या इसलिए कि आपके पास यहां Read() है?

int newMark = Convert.ToInt32(Console.Read());

ReadLine() के बजाय ??

int newMark = Convert.ToInt32(Console.ReadLine());
4
Toskr 26 अप्रैल 2017, 04:01

Console.Read (https ://msdn.microsoft.com/en-us/library/system.console.read(v=vs.110).aspx) कंसोल से 1 अक्षर पढ़ता है। यदि आप अपने कार्यक्रम के माध्यम से कदम रखते हैं, तो आप देखेंगे कि जो अंक के लिए 4 प्राप्त कर रहा है, न कि 40। 0 को स्ट्रीम पर छोड़ दिया जाता है, और लूप के अगले पुनरावृत्ति पर ReadLine() द्वारा उठाया जाता है .

इसलिए, int newMark = Convert.ToInt32(Console.Read()); को int newMark = Convert.ToInt32(Console.ReadLine()); में बदलने का प्रयास करें

3
Phil M 26 अप्रैल 2017, 04:02