Немедленный выход из цикла while в C++

Как немедленно выйти из цикла while, не переходя в конец блока?

Например,

while (choice != 99)
{
    cin >> choice;
    if (choice == 99)
        //Exit here and don't get additional input
    cin>>gNum;
}

Любые идеи?


person Meir    schedule 16.05.2009    source источник
comment
Я готов поспорить с вами, что ответ находится в назначенном вам чтении.   -  person Bill the Lizard    schedule 16.05.2009
comment
@akappa, я бы согласился, но, черт возьми, лучше спросить, чем не спрашивать.   -  person Charlie Martin    schedule 16.05.2009
comment
@David Bejar Помните, что цель состоит не только в том, чтобы удалить тег «Домашнее задание», но и в том, чтобы отредактировать хорошие вопросы и закрыть/удалить плохие.   -  person Sam    schedule 18.10.2012
comment
В то время как уже сломалось бы, если бы выбор был 99. while(choice != 99) { if(choice == 99) }   -  person Christoffer    schedule 07.10.2018


Ответы (9)


Использовать перерыв?

while(choice!=99)
{
  cin>>choice;
  if (choice==99)
    break;
  cin>>gNum;
}
person Andomar    schedule 16.05.2009
comment
Предполагая, что выбор не 99 входит в цикл - что здесь возможно - цикл while можно упростить до while(true) - person Drew Dormann; 18.05.2009
comment
Да, и сохранение результатов в массиве тоже может быть полезно;) - person Andomar; 18.05.2009

cin >> choice;
while(choice!=99) {
    cin>>gNum;
    cin >> choice
}

В этом случае вам не нужен перерыв.

person akappa    schedule 16.05.2009
comment
Но, фу, вы продублировали код извлечения потока. - person Lightness Races in Orbit; 08.06.2011
comment
так? Не дублировать код — это не догма, которой вы должны следовать религиозно. В данном случае я нахожу это решение более естественным. - person akappa; 08.06.2011
comment
Нет ничего плохого в дублировании «cin». На самом деле это более эффективно, чем все другие ответы в этой теме. Помещение оператора if внутрь цикла while заставляет цикл выполнять в два раза больше проверок. - person xikkub; 19.03.2012
comment
Это должен быть правильный ответ. - person Olaf Szmidt; 11.12.2018

Используйте break как таковой:

while(choice!=99)
{
  cin>>choice;
  if (choice==99)
    break; //exit here and don't get additional input
  cin>>gNum;
}

Это также работает для циклов for и является ключевым словом для завершения предложения switch. Подробнее здесь.

person Elben Shira    schedule 16.05.2009

Да, перерыв сработает. Однако вы можете обнаружить, что многие программисты предпочитают не использовать его, когда это возможно, а использовать условный оператор if для выполнения чего-либо еще в цикле (таким образом, не выполняя его и выходя из цикла чисто)

Что-то вроде этого позволит достичь того, что вы ищете, без необходимости использовать перерыв.

while(choice!=99) {
    cin >> choice;
    if (choice != 99) {
        cin>>gNum;
    }
}
person Danny Battison    schedule 16.05.2009

хм, break ?

person Remus Rusanu    schedule 16.05.2009

while(choice!=99)
{
  cin>>choice;
  if (choice==99)
    exit(0);
  cin>>gNum;
}

Поверьте мне, это выйдет из цикла. Если это не сработает, ничего не получится. Имей в виду, это может быть не то, чего ты хочешь...

person Will Hartung    schedule 16.05.2009
comment
+1 lol Может быть, добавить ::ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE, 0), чтобы цикл while не перезапускался ни при каких обстоятельствах! - person Andomar; 16.05.2009

Да, я почти уверен, что вы только что поставили

    break;

прямо там, где вы хотите, чтобы он вышел

как

    if (variable == 1)
    {
    //do something
    }
    else
    {
    //exit
    break;
    }
person Chris Stryker    schedule 16.05.2009

Пытаться

break;
person Dario    schedule 16.05.2009

Вы никогда не должны использовать оператор break для выхода из цикла. Конечно, вы можете это сделать, но это не значит, что вы должны. Это просто не очень хорошая практика программирования. Более элегантный способ выхода заключается в следующем:

while(choice!=99)
{
    cin>>choice;
    if (choice==99)
        //exit here and don't get additional input
    else
       cin>>gNum;
}

если option равно 99, делать больше нечего, и цикл завершается.

person AlbertS    schedule 08.10.2011