Как вернуться в начало цикла c
Перейти к содержимому

Как вернуться в начало цикла c

  • автор:

Как вернуться в начало программы?

Собственно несколько дней назад начал изучать язык С++,добрался до темы switch,в общем и целом легкая тема но возникает вопрос.По заданию сделал собственный примитивный калькулятор выполняющий 4 функции, все работает хорошо но возник вопрос можно ли как то вернутся к началу cin >> c? То есть как расчеты выполнены,чтобы можно было выбрать другое действие,а не каждый раз запускать по новой программу?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
int a, b, c; cout  "введите a,b"  endl; cin >> a >> b; cout  "введите действие\n"  "1.+\n"  "2.-\n"  "3./\n"  "4.*\n"  endl; cin >> c; switch (c) { case 1: cout  a+b  endl; break; case 2: cout  a-b  endl; break; case 3: cout (float)a/b  endl; break; case 4: cout  a*b  endl; break; default: cout  "Неккоректное значение"  endl; break; } }

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Как вернуться в начало программы.
Как сделать так, чтобы при наступления какого-либо условия программа прерывалась и начаналась.

Как вернуться в начало цикла while?
У меня в коде такая структура while ( game == 1) //code// level = 2 while(game == 2 ).

Вернуться в начало файла
Нужно вернуться в начало, при чтении текстового файла fstream

Как вернуться в начало программы?
Здравствуйте, подскажите пожалуйста можно ли без использования цикла и метки вернуться к началу.

1202 / 700 / 331
Регистрация: 22.02.2018
Сообщений: 2,040
Записей в блоге: 2
Например, можно так

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
#include using namespace std; int main() { int a, b; char c; bool isexit = true; while(isexit) { cout  "введите a,b"  endl; cin >> a >> b; cout  "введите действие\n"  "+\n-\n/\n*\n0 - exit"  endl; cin >> c; switch (c) { case '+': cout  a+b  endl; break; case '-': cout  a-b  endl; break; case '/': cout (float)a/b  endl; break; case '*': cout  a*b  endl; break; case '0': isexit = false; break; default: cout  "Неккоректное значение"  endl; break; } } system("pause"); return 0; }

7428 / 5021 / 2891
Регистрация: 18.12.2017
Сообщений: 15,692

ЦитатаСообщение от 2atlantis Посмотреть сообщение

double a, b;

(float) уберите, лучше добавьте проверку чтобы не было деления на ноль

по Вашему вопросу:

1 2 3 4 5 6 7 8 9
char ch; do { . . . cout  "Continue? (Y - YES) "; cin >> ch; } while (ch=='Y' || ch=='y');

Добавлено через 7 минут

ЦитатаСообщение от 2atlantis Посмотреть сообщение

Возврат в начало цикла при условии.

Нужно чтобы в случае какого-то события, типа там a=2 цикл начинался заново, т.е идет цикл, наткнулся на условие, вернулся в начало, пропустив все команды идущие после этого условия, потом цикл заново. Т.е. нужен типа оператор который перезапускает цикл при условии, например brake его останавливает, а мне нужно чтобы происходил рестарт.
Надеюсь на вашу помощь, заранее спасибо.

hosm

Ссылка скрыта от гостей

denis79513

Я имею в виду язык Pascal
И тот пример что вы дали:

var i : Integer; s : string; begin s := ''; // A big loop for i := 1 to 9 do begin // Skip loop processing for certain values of i if (i = 3) or (i = 7) then Continue; s := s + IntToStr(i); s := s + ' '; end; // Show the string created by the above loop ShowMessage('s = '+s); end;

там в цикле при s=3 или 7 цикл просто пропускает эти цыфры, а мне нада чтобы возвращалось к началу цикла. не продолжая идти дальше, увидел условие, сразу к началу.

hosm

вернулся в начало
чего?
либо я вас не понимаю, либо так по-хорошему

repeat if a <> 2 then begin . end until a=1;

или по-плохому =)

label ret; ret: repeat if a = 2 then goto ret . until a=1;
denis79513

Мне нужно чтобы когда цикл видит определенное условие, то пропускал все команды которые в нем есть, стоящие после этого условия и начинал сначала цикла.

hosm

Описание
Процедура Continue осуществляет переход на следующую итерацию цикла (выходит из текущего витка цикла). Используйте её с осторожностью, так же как и Goto инструкцию.

Важно обратить внимание, что инструкция Continue переходит только к началу текущего цикла — не из любых вложенных циклов выше него. А инструкция Goto может перейти.
Похожие команды
Goto Вызывает скачок к метке, независимо от вложения
Repeat Повторяет инструкции, пока не выполнится условие завершения

Добавлено: Continue в паскале нет, появилось вроде только в Delphi.
моделируется переходом по Goto или правильным построением условий внутри цикла, пример приводила выше.

Как вернуться в начало программы.

Как сделать так, чтобы при наступления какого-либо условия программа прерывалась и начаналась заново.

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Как вернуться в начало цикла while?
У меня в коде такая структура while ( game == 1) //code// level = 2 while(game == 2 ).

Вернуться в начало файла
Нужно вернуться в начало, при чтении текстового файла fstream

Вернуться в определенное место программы
Здравствуйте! Есть ли возможность в С++ выполнить возврат к определенному месту в коде. Например у.

Не могу вернуться к тексту программы
Программа вобщем-то работает, но после выполнения компилятор (Borland C++ ) не возвращает к тексту.

314 / 268 / 56
Регистрация: 27.08.2010
Сообщений: 553
Ну, например, засунуть всё в цикл и при наступлении условия сделать continue)

Эксперт С++

8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562

Бесконечный цикл допустим.
Или цикл do while.
Или просто while с определенным условием.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
#include int main() { while(1) { int a=0; std::cin>>a; if(a!=5) continue; std::couta'\n'; break; } return 0; }

Регистрация: 10.07.2009
Сообщений: 206

Но программа же снова не начнется, просто прервется и все.

Добавлено через 44 секунды
на С программа, С++ не понимаю

ниначмуроФ
851 / 535 / 110
Регистрация: 12.10.2009
Сообщений: 1,913

goto

314 / 268 / 56
Регистрация: 27.08.2010
Сообщений: 553
KamalovRadik, while и continue будут и в C работать)

Эксперт С++

2890 / 1825 / 356
Регистрация: 09.09.2010
Сообщений: 3,841

dihlofos, Ну и тогда програма вийдет из етого цыкла но не и продолжыт виполнение кода который наисан уже после етого цыкла.

К примеру можно код засунуть в бесконечный цыкл и пры какомто условие написать continue;

Добавлено через 1 минуту
PointsEqual, тоже вариант,но пользоватсо без фанатизма

Регистрация: 10.07.2009
Сообщений: 206
На примере можно.
While(1) — это бесконечный цикл?

Asics^, да я сам уже догнал, что бяку сначала написал) Поправил уже.

Меню пользователя @ dihlofos

Эксперт С++

2890 / 1825 / 356
Регистрация: 09.09.2010
Сообщений: 3,841

ЦитатаСообщение от KamalovRadik Посмотреть сообщение

While(1) — это бесконечный цикл?
Да,или же while(true)
Регистрация: 10.07.2009
Сообщений: 206
А если continue вставить, и условие обратное написать ничего же не получится, просто прервется и все

Эксперт С++

2890 / 1825 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
Пример использования:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
#include #include using namespace std; int main() { long int a, b; for(;;) { cout  "Bedute 4uclo: "; cin >> a; cout  "Bedute deluTeLb: "; cin >> b; if(b == 0) { cout  "ERROR(HeLb39 deluTb Ha )"  endl; continue; } cout  "Result: "  a  " / "  b  " = "  a / b  endl; cout  "Octatok ot DeleHue: "  a % b  endl; break; } getch(); return 0; }

Заметка: for( ; ; ) — тоже бесконечный.
ниначмуроФ
851 / 535 / 110
Регистрация: 12.10.2009
Сообщений: 1,913

KamalovRadik, а так пойдет?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
int main() { while( true ){ cout"Restart program"endl; int k = 0; int s = 0; while( true ){ cout"Enter number: "; cin >> k; s += k; if (s>10) break; } } return 0; }

Эксперт С++

8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562

KamalovRadik, continue — переводит цикл к следующей итерации
break — прекращает выполнение цикла.
Что вам конкретно нужно?

314 / 268 / 56
Регистрация: 27.08.2010
Сообщений: 553
KamalovRadik, тот же пример Lavroff‘а, только на C:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
#include int main() { while(true) { int a=0; scanf("%d",&a); if(a!=5) continue; printf("%d\n",a); break; } return 0; }

Будет возвращаться к началу, пока не введём 5.
Регистрация: 10.07.2009
Сообщений: 206

Вот в игре «21» Как сделать так, тобы при вводе суммы большей чем есть на счету, выходило сообщение, «столько денег нет», и игра начаналась заново.
С помощью continue пробовал, цикл не заканчивается

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
#include #include #include #include int koloda[13] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 2, 3, 4, 11}; int karta() {return rand()%13;} struct igr { int kartas; char znak;}; struct igr kolod[13]= { {2, '2'}, {3, '3'}, {4, '4'}, {5, '5'}, {6, '6'}, {7, '7'}, {8, '8'}, {9, '9'}, {10, 'T'}, {2, 'J'}, {3, 'D'}, {4, 'K'}, {11, 'A'} } ; int main() { int igrok, komp, kart,c=0, h=10, baks,b=0; char ans, buf; time_t t; srand((unsigned)time (&t)); while(1) { do { if(b!=0) printf("net stolko deneg"); b=0; clrscr(); printf("****************** Igra nachinaetsya. ***************\n\n"); printf(" \n U vas %d baksov", h); printf(" \n Vvetite summu stavki"); scanf("%d", &baks); if (baks>h) { b++; printf("\n net stolko babla"); continue;} komp=0;igrok=0; do { c=0; kart=karta(); printf("Vasha karta: %c ", kolod[kart].znak); if (kolod[kart].znak=='A') { printf("\n Kak '1' ? Da 'y', net 'n'"); ans=getchar(); buf=getchar(); if (ans=='y') kolod[kart].kartas=1;} igrok+=kolod[kart].kartas; printf ("\tSumma = %d\n", igrok); if(igrok>21) { printf("U vas perebor\n "); break; } printf("vzyat eshe? ('y' - yes, 'n' - no) : "); ans = getchar(); buf = getchar(); } while(ans!='n'); if(igrok  21) { printf("\nkarti komputera:"); do { kart=karta(); if (kolod[kart].znak=='A') c++; printf(" %c", kolod[kart].znak); komp+=kolod[kart].kartas; if(komp>21 && c>0) komp=komp-c*10; } while(komp17) ; printf("\t Summa = %d", komp); textcolor(YELLOW); if(igrok>komp) printf(" \npozdravlyem, vi vuugrali\n"); if(igrok==komp) printf(" \nnichyia\n"); if (igrokkomp && komp21) printf(" \nti proigral\n"); if(igrokkomp && komp>21) printf("\npobeda\n"); } printf(" \n igrat eshe? ('y' - yes, 'n' - no) : "); ans = getchar(); buf = getchar(); if(ans=='n') break; } while(ans!='n'); } textcolor(GREEN); printf(" \n Spasibo za igru. \n "); getch(); }

Операторы break и continue в C++

break и continue c++

Оператор break в C++

С оператором break вы уже встречались, если читали наши статьи об операторе switch и о цикле for. И наверняка уже имеете представление о том, как он работает. Поговорим еще немного об этом операторе, возможно кому-то будет полезно.

Достаточно часто при использовании циклов и почти всегда при использовании оператора switch , программисту необходимо прервать выполнение тела цикла или тела switch соответственно. break , как раз используется в таких случаях.

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

Пример: оператор break C++
using namespace std ;
setlocale ( LC_ALL , «rus» ) ;
int digit = 0 ;
int answer = 0 ;
cout << "Введите число от 1 до 7, которое должен угадать ваш противник:" ; cin >> digit ; // ввод загаданного числа
if ( digit >= 1 && digit <= 7 ) // проверяем число на соответствие заданному диапазону break ; // если соответствует - прервать цикл else // иначе попросить ввести число снова cout << "Неправильный диапазон! Введите число от 1 до 7:" ; system ( "cls" ) ; //эта функция очистит экран и противник не увидит, какое число было введено cout << "Попробуйте угадать число, которое загадал ваш оппонент!\n" ; cout << "Это целое число от 1 до 7. Введите ваш вариант ответа:" ; for ( int myTry = 1 ; ; myTry ++ ) // myTry будет хранить число попыток cin >> answer ;
if ( answer < 1 || answer >7 ) // если диапазон нарушен
myTry — ; // уменьшаем счетчик попыток на единицу
cout << ". Введите число в диапазоне от 1 до 7:" ; else if ( digit == answer ) // если числа совпадают cout << "Поздравляем! Вы отгадали число с " << myTry << "-й попытки!\n\n" ; break ; // прервать цикл else // иначе еще одна попытка отгадать cout << "Вы не угадали! Попробуйте еще раз:" ;

Чтобы всё было честно и игрок, который загадывает, не мог ввести число из недопустимого диапазона, запускаем бесконечный цикл в котором и происходят ввод и проверка числа. Если число соответствует необходимому диапазону – цикл прерывается (строки 15 – 18), если же нет – на экране появляется предупреждение и предложение ввести число снова. Так будет происходить, пока введенное число не войдет в нужный диапазон.

После ввода корректного числа, в строке 25 вызываем специальную функцию system(“cls”); , которая очистит содержимое экрана, перед тем, как второй игрок приступит к отгадыванию числа (сработает только в windows).

Далее определяем второй бесконечный цикл (строки 29 – 47), но уже со счетчиком myTry . Он будет считать количество попыток игрока отгадать число. Игрок вводит число и оно сразу проверяется на соответствие диапазону в строках 33 – 37.

Если не соответствует – предупреждаем и отнимаем единицу от счетчика попыток myTry . Иначе если число в нужный диапазон вошло, проверяем соответствует ли оно загаданному числу (строки 38 – 42): да – поздравляем и прерываем цикл, нет – переходим к выполнению строк 43 – 46 – говорим об ошибке и предлагаем ввести число снова.

оператор break c++

оператор break c++

Оператор continue в C++

Этот оператор применяется тогда, когда необходимо прервать (пропустить) текущую итерацию цикла и приступить к следующей итерации. При его выполнении в цикле for происходит остановка текущей итерации, переход к изменению управляющей переменной, а затем проверка условия продолжения выполнения цикла.

Решим такую задачу: Необходимо вывести на экран те числа, которые делятся на 7 без остатка и находятся в диапазоне от 1 до 70 .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *