Застрял в бесконечном цикле

Я не вижу здесь проблемы.

Я застрял в бесконечном цикле, когда я вызываю запись.

Я делаю wcf, поэтому мой сервер работает нормально. Это мой клиент. Все работает, если убрать шлейфы. Но мне нужно это для меню. Итак, я знаю, что мой код правильный, но мои циклы - нет.

Не вижу, где я ошибаюсь.

class Client
{
    static void Main(string[] args)
    {
        try
        {
            BikeReference.BikeSalesClient bikeRef = new BikeClient.BikeReference.BikeSalesClient();
            String menu = "\n\nEnter:\n" +
                "0 to get all the bike stock;\n" +
                "1 to get all the bike types;\n" +
                // ...
                "8 to quit:\n";

            Console.WriteLine(menu);

            // will throw FormatException if not int
            int entry = int.Parse(Console.ReadLine());

            do
            {
                switch (entry)
                {
                    case 0:
                        foreach (var obj in bikeRef.GetAllBikeStock())
                        {
                            Console.WriteLine("");
                            Console.WriteLine("Bike ID: {0}", obj.IdBikeStock);
                            Console.WriteLine("Bike Type ID: {0}", obj.IdBikeType);
                            // ...
                            Console.WriteLine("Sold: {0}", obj.isItSold);
                            //break;
                        }
                        break;

                    case 1:
                        Console.WriteLine(bikeRef.UpdateBikeStock(15));
                        break;

                    default:
                        Console.WriteLine("Unrecognised option...");
                        break;
                }
            }
            while (entry != 7);
        }

        catch (Exception)//(Exception e)
        {
           // Console.WriteLine("{0} Exception caught.", e);
        }
    }
}

person user1234167    schedule 22.11.2012    source источник


Ответы (4)


измените переменную ввода внутри цикла

int entry = 0; //Init
do
{
    Console.WriteLine(menu);

    // will throw FormatException if not int
    entry = int.Parse(Console.ReadLine());
    ...
} while (entry != 7);
person doctor killer    schedule 22.11.2012
comment
Ошибка 1 Имя «запись» не существует в текущем контексте в этой строке: while (запись! = 7); - person user1234167; 22.11.2012
comment
начальная запись вне цикла (я добавил в ответ) - person doctor killer; 22.11.2012
comment
Извините, я не знаю, что вы имеете в виду? - person user1234167; 22.11.2012
comment
см. код в ответе: я добавил запись int = 0; линии перед входом в цикл. Запись не существовала бы за пределами фигурных скобок, если бы она не была объявлена ​​снаружи, поэтому переменная не была бы доступна в тесте while(entry != 7) в конце. - person doctor killer; 22.11.2012
comment
Ошибка 1. Локальная переменная с именем «запись» не может быть объявлена ​​в этой области, потому что она придаст другое значение «записи», которая уже используется в «родительской или текущей» области для обозначения чего-то еще, это ошибка, которую я получаю, когда я добавить эту строку - person user1234167; 22.11.2012
comment
Было бы полезно, если бы я правильно прочитал изменения кода. дислексия не помогает. Ваш ответ был правильным с самого начала, спасибо :) о, кроме того, что это была неверная запись; не инт запись = 0; - person user1234167; 22.11.2012

Внутри цикла вы не изменяете переменную «запись». Итак, если ваша первая запись = 7, вы застрянете в своем цикле, потому что (entry != 7) это всегда верно для while (entry != 7);

Добавьте строку entry = int.Parse(Console.ReadLine()); перед switch (entry) Таким образом, вы будете продолжать запрашивать «вход», учитывая, что возможный вход равен 7. Таким образом, вы выходите из цикла.

    int entry;

    do
    {  
        Console.WriteLine(menu);

        entry = int.Parse(Console.ReadLine());
        switch (entry)
        //...
   }while (entry != 7);
person dreamcrash    schedule 22.11.2012

Как написано выше, вы должны изменить переменную entry внутри цикла:

class Client
{
    static void Main(string[] args)
    {
        try
        {
            BikeReference.BikeSalesClient bikeRef = new BikeClient.BikeReference.BikeSalesClient();
            String menu = "\n\nEnter:\n" +
                "0 to get all the bike stock;\n" +
                "1 to get all the bike types;\n" +
                // ...
                "8 to quit:\n";

            Console.WriteLine(menu);

                // will throw FormatException if not int
                int entry = int.Parse(Console.ReadLine());

            do
            {
                switch (entry)
                {
                    case 0:
                        foreach (var obj in bikeRef.GetAllBikeStock())
                        {
                            Console.WriteLine("");
                            Console.WriteLine("Bike ID: {0}", obj.IdBikeStock);
                            Console.WriteLine("Bike Type ID: {0}", obj.IdBikeType);
                            // ...
                            Console.WriteLine("Sold: {0}", obj.isItSold);
                            //break;
                        }
                        break;

                    case 1:
                        Console.WriteLine(bikeRef.UpdateBikeStock(15));
                        break;

                    default:
                        Console.WriteLine("Unrecognised option...");
                        break;
                }
            entry = int.Parse(Console.ReadLine());
            }
            while (entry != 7);
        }

        catch (Exception)//(Exception e)
        {
           // Console.WriteLine("{0} Exception caught.", e);
        }
    }
}
person Tobia Zambon    schedule 22.11.2012

Вы должны ждать ввода после переключения. иначе запись не может стать != 7

person Mirco    schedule 22.11.2012