Ошибка при использовании цикла while - PullRequest
0 голосов
/ 15 сентября 2010

Цикл while не работает.я получаю ошибку, когда она попадает в разрыв, чтобы выйти из цикла.ошибка не является циклическим оператором, из которого можно выйти.

static void Main(string[] args)
{
    accounts myclass = new accounts();
    string userin;


    myclass.fillAccounts();
    //int i = 0;
    //while (i != 1)
    do
    {
    }
    while (userin != "x")
    {
        //use the following menu:            
        Console.WriteLine("*****************************************");
        Console.WriteLine("enter an a or A to search account numbers");
        Console.WriteLine("enter a b or B to average the accounts");
        Console.WriteLine("enter an x or X to exit program");
        Console.WriteLine("*****************************************");
        Console.Write("Enter option-->");
        userin = Console.ReadLine();
        if (userin == "a" || userin == "A")
        {
            myclass.searchAccounts();
        }
        else if (userin == "b" || userin == "B")
        {
            myclass.averageAccounts();
        }
        else if (userin == "x" || userin == "X")
        {
            break;
        }
        else
        {
            Console.WriteLine("You entered an invalid option");
        }
    }
}

Ответы [ 5 ]

8 голосов
/ 15 сентября 2010

Вам удалось поместить тело ниже фактического цикла, насколько это касается кода.

У вас есть:

do 
{

} while (criteria);
{
   // code you want to execute repeatedly
}

В результате вы получите сообщение об ошибке для вашего оператора break, поскольку оно фактически не содержится в цикле.

Вы должны иметь только:

while (criteria)
{
    // code you want to execute repeatedly
} 

Пропуск до do порции, поскольку это фактически создает допустимый цикл над кодом, который вы действительно хотите зациклить.

Редактировать: @Randy, вы уже второй раз отправляете аналогичный вопрос. Вы эффективно пытаетесь объединить циклы do и while. Перейдите на MSDN и просмотрите петли . Короче говоря, цикл while проверяет состояние перед телом цикла, цикл do проверяет после тела цикла. В цикле do также используется ключевое слово while, что может сбить вас с толку.

Do loop

do
{
    // your code...
    // this loop is useful when you want the loop to execute at least once, since  
    // the exit condition will be evaluated *after* the first iteration
} while (condition);

Пока петля

while (condition)
{
    // your code...
    // this loop is useful when you want to prevent *any* iterations unless the 
    // original boolean condition is met.
}

Это две отдельные циклические конструкции. Объединение их не удваивает ваше удовольствие от зацикливания, оно просто создает один цикл (do) и затем следующий блок кода.

6 голосов
/ 15 сентября 2010

Потому что это не тело цикла.

do 
{ 
    // This is the do-while loop body.
    // You should put the code to be repeated here.
    break; // does work
} 
while(...)
{ 
    // This is not the do-while loop body.
    // This is just an ordinary block of code surrounded by the curly braces
    // and therefore declares a local scope. Variables declared in this
    // block is not visible outside the braces.
    break; // doesn't work
}
0 голосов
/ 15 сентября 2010

Это была синтаксическая ошибка, вы проверили эту.

string myString = "X3";int i = 4;int j = 0;do {if (myString == "X" + j) {break;} j ++;} while (j <4); </p>

0 голосов
/ 15 сентября 2010

как в вашем случае в do первый оператор является break, поэтому он выходит из цикла, и оператор while не будет выполнен ...

0 голосов
/ 15 сентября 2010

Все исправили ваш синтаксис для цикла do / while, поэтому я не буду подчеркивать этот момент.

Чтобы позволить пользователям вводить свои команды без учета регистра, вы можете использовать if(userIn.ToUpper() == "X") и не нужно проверять оба условия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...