Не вводить в случае переключения в C # - PullRequest
0 голосов
/ 01 октября 2018

Я не могу войти в случае 2 оператора switch, и я не знаю почему.Если я удаляю цикл do while, код работает отлично.Это о чем-то с памятью массива структуры?Вот код:

class Notebook {

        struct Student
        {
            public String id;
            public String name;
            public void showInfo(Student x) {
                Console.WriteLine("\t ID: " + x.id);
                Console.WriteLine("\t Name: " + x.name);
            }

        }
        static void Main(string[] args){

            bool display = true;

            int studentNum = int.Parse(Console.ReadLine());

            Student[] students = new Student[studentNum];

            do {

                Console.Clear();
                Console.WriteLine("1.- Insert register");
                Console.WriteLine("2.- Show register");
                Console.WriteLine("3.- Exit");


                String opc = Console.ReadLine();


                switch (opc) {

                    case "1":
                        Console.Clear();
                        for(int i = 0; i < students.Length; ++i){
                            Console.WriteLine("Name of the student " + (i+1));
                            students[i].name = Console.ReadLine();
                            Console.WriteLine("ID of the student " + (i+1));
                            students[i].id = Console.ReadLine();
                        }
                        break;

                    case "2":
                        Console.Clear();
                        for(int i = 0; i < students.Length; ++i){
                            students[i].showInfo(students[i]);
                        }
                        break;

                    case "3":
                        Console.Clear();
                        Console.WriteLine("bye");
                        display = false;
                        break;

                }

            }while(display);

        }
    }

Я думаю, что это «что-то» в памяти строки opc, которое избегает случая 2.

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

добавить Console.ReadLine ();перед перерывом дело "2".

case "2":
                    Console.Clear();
                    for (int i = 0; i < students.Length; ++i)
                    {
                        students[i].showInfo(students[i]);
                    }
                    Console.ReadLine();
                    break;

Вы пишете информацию об учениках и вызываете Console.Clear () после этого

0 голосов
/ 01 октября 2018

Ваша проблема в операторе Console.Clear, который вы запускаете в начале цикла do while.Прокомментируйте эту строку, и вы увидите, что ваш код будет case "2".

. Он будет иметь значение 2 даже в вашем исходном коде, но консоль каждый раз очищается при запуске цикла do while ипоэтому вы не видите операторов, записанных в логике регистра "2.".

Нет проблем с памятью, как вы и предполагали.

Цикл do while должен иметь комментарий Console.Clear, как в кодениже.

 do {

            //Console.Clear();
            Console.WriteLine("1.- Insert register");
            Console.WriteLine("2.- Show register");
            Console.WriteLine("3.- Exit");
...