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

подскажите как вернуться в случае невыполнение определенного условия в начало текста программы. (С++ Билдер 6)

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

П.С. возможно описал по-идиотски, но постарайтесь помочь

Форумчанин
Регистрация: 03.02.2008
Сообщений: 213
Функция GOTO перемещает на метку в любое место где стоит метка но в пределах функцыи.
Пишу программы на заказ, контакты под аватаром!
Отзывы тут
Участник клуба
Регистрация: 29.10.2009
Сообщений: 1,456
вроде не рекомендуется её использовать.
Дружите с Linq 😉
Форумчанин
Регистрация: 15.10.2008
Сообщений: 822

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

Не давай организму поблажки, каждый день тренируй его в шашки..

Точки восстановления: КАК ОТКАТИТЬ WINDOWS

Источник: www.programmersforum.ru

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

Я пытаюсь создать структуру повторения, когда в конце кода набираю «Y», чтобы снова запустить «проверку страховой цены».

#include using namespace std; int main() < // Declaration of variables char animal, status, continue_; int i=0; //Begin Loop cout>animal; if(animal==’D’ || animal==’d’) < cout>status; if(status==’Y’ || status==’y’) cout else if (animal==’C’ || animal==’c’) < cout>status; if(status==’Y’ || status==’y’) cout else if (animal==’B’ || animal==’b’ || animal==’R’ || animal==’r’) cout>continue_; if(continue_==’n’ || continue_==’N’) cout

Как сделать цикл кода обратно в начало?

Решение

do < // begin loop . >while(continue_!=’n’ continue_!=’N’);

Другие решения

Ну, для начала вам понадобится петля …

В этом примере, вероятно, цикл while (предварительное тестирование, если вы заинтересованы в его поиске)

Чтобы достичь того, что вы хотите, вам понадобится логический флаг, и он будет запускать цикл, пока флаг установлен в значение true.

(Предполагая, что остальная часть вашего кода работает нормально)

// Declaration of variables char animal, status, continue_; int i=0; bool running = true;//Begin Loop while (running == true) < // Rest of program cout>continue_; if(continue_==’n’ || continue_==’N’) < cout> return 0; >

Б. Уорд прав, вы должны использовать «вложенные» циклы do-while, чтобы полностью решить вашу проблему. Потому что в вашем коде есть другие условия, которые необходимо выполнить, прежде чем программа сможет продолжить работу, и они также потребуют услуг цикла do-while. Как это;

#include using namespace std; int main() < // Declaration of variables char animal, status, continue_; int i=0; //Begin Loop do < cout> animal; if(animal==’D’ || animal==’d’) < cout>status; if(status==’Y’ || status==’y’) < coutelse if(status ==’N’ || status==’n’) < coutelse < cout>while(status != ‘y’ || status != ‘Y’ || status != ‘n’ || status != ‘N’); > else if (animal==’C’ || animal==’c’) < cout>status; if(status==’Y’ || status==’y’) < coutelse if(status ==’N’ || status==’n’) < coutelse < cout>while(status != ‘y’ || status != ‘Y’ || status != ‘n’ || status != ‘N’); > else if (animal==’B’ || animal==’b’ || animal==’R’ || animal==’r’) cout cout>continue_; if(continue_==’n’ || continue_==’N’) coutwhile(continue_ == ‘y’ || continue_ == ‘Y’); return 0; >

Читайте также:
Порядок регистрации программы эвм

Источник: web-answers.ru

10 ФИШЕК YOUTUBE, которые мало кто знает

Arduino.ru

У меня такой вопрос: можно ли реализовать возврат к началу цикла програмы после снятия внешнего прерывания? Т.е.выход из подпрограммы прерывания в начало основного цикла loop(). Нигде решения не нашел. Спасибо.

  • Войдите на сайт для отправки комментариев

Втр, 02/06/2015 — 23:41

kisoft аватар

Как правило такая постановка задачи — не корректный способ решить её.
Выход из прерывания происходит в точку, где произошло это прерывание.

  • Войдите на сайт для отправки комментариев

Ср, 03/06/2015 — 01:06

Puhlyaviy аватар

kisoft пишет:

Как правило такая постановка задачи — не корректный способ решить её.
Выход из прерывания происходит в точку, где произошло это прерывание.


Чё не коректная. Такое прерывание называется РЕСЕТ.

  • Войдите на сайт для отправки комментариев

Ср, 03/06/2015 — 07:09

kisoft аватар

Ресет это не только ценный мех ещё и вызов setup()

  • Войдите на сайт для отправки комментариев

Ср, 03/06/2015 — 07:32

Да простят меня боги программирования и прогрессивная мировая общественность, но может быть оператор goto ? (http://arduino.ru/Reference/Goto) Ну, если уж совсем никак иначе..

  • Войдите на сайт для отправки комментариев

Ср, 03/06/2015 — 07:44

trembo аватар

setup можно обойти выяснив что мы туда попали не из-за пропадания-включения питания.
Ещё lehak давно об этом писАл.
Ну а переход можно сделать разрешив WDT

  • Войдите на сайт для отправки комментариев

Ср, 03/06/2015 — 20:01

kisoft аватар

«Мы» тут все пытаемся оседлать сферического коня в вакууме, не зная задачи, потому можно сделать как угодно и при перезагрузке можно определить по какой причине мы перезагружены, и обойти setup тоже можно, только чаще всего задача не стОит, чтобы из пушки по воробьям палить, разве что если скушно и из спортивного интереса. Можно и при выходе из прерывания восстановить флаги и подменить в стеке адрес выхода на любой нужный адрес, только зачем такой хардкод нужен?

  • Войдите на сайт для отправки комментариев

Ср, 03/06/2015 — 22:31

Всем спасибо) Опробывал return. Ничего так ,вроде, работает.

int intPin = 0; void setup() < attachInterrupt(intPin,pause,LOW); //функция прерывания pinMode(2, INPUT); //настраиваем контакт 2 на вход(он же intPin) >void loop() < . . if (digitalRead(2) == LOW). . >

  • Войдите на сайт для отправки комментариев

Ср, 03/06/2015 — 23:39

kisoft аватар

Вот вот, как всё просто 😉

Нахрена мерседес если ездить только на огород за картошкой 🙂

А ещё очередная загадка, когда судя по комментариям intPin должен быть пином 2, а реально, пин 0. Эхх..

  • Войдите на сайт для отправки комментариев

Ср, 03/06/2015 — 23:47

Да нет же) Это не пин , это номер прерывания. Прерывание «0», а пин для прерывания действительно задействован «2». Кстати, плата ардуино Уно.

  • Войдите на сайт для отправки комментариев

Чт, 04/06/2015 — 07:05

Читайте также:
Протокол компьютерной сети это программа для связи абонентов

kisoft аватар

Не разглядел вчера в темноте 🙂
В таком случае название странное, слово pin сбило с толку.

  • Войдите на сайт для отправки комментариев

Чт, 04/06/2015 — 11:41

Ну в общем да) Так будет короче и понятнее)

void setup() < attachInterrupt(0,pause,LOW); //функция прерывания (на втором контакте UNO) pinMode(2, INPUT); //настраиваем контакт 2 на вход >void loop() < . . if (digitalRead(2) == LOW). . >

  • Войдите на сайт для отправки комментариев

Втр, 09/02/2016 — 22:18

Небольшое вступление. Сразу же прошу прощения и сообщаю что в написании программ МК я лох педальный. На самом деле у меня вторая радиолюбительская категория и с микросхемами на обычной логике никаких проблем нет. С монтажом пайкой и прошивкой МК тоже все в порядке.

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

В программе все просто до безобразия. Прерывание от кнопки с каждым нажатием прибавляет по единице к одной переменной. Потом в цикле с помощью if смотрим чему равна переменная и в зависимости от этого выполняется то или иное.

Собственно все работает, режимы переключаются светодиоды моргаю так как задумано. Но так как после прерывания выполнение продолжается именно с того места откуда оно было вызвано то режимы переключаются не сразу.

Там в некоторых режимах работает for и вот пока он не закончиться визуально режим не переключится, хоть переменная и обновилась. Вообщем друзья, как мне победить это? Что бы переключалось мгновенно, в независимости от того где остановилась программа.

Единственным я вижу это как то после прерывания прыгать на начало цикла, почему собственно и написал сюда. Экспериментировал и return и continue и даже с goto но что то ничего не получается. Может изначально сделать как то иначе? Подскажите примерно по какому пути идти чтобы решить такую задачу? Я дальше сам допетрю.

Спасибо всем большушие!

[code] int buttonInt = 0; // Прерывание 0 на втором пине) int led1 = 5; // Первый светодиод int led2 = 6; // Второй светодиод int btn = 3; // Кнопка volatile byte regim = 0; // Переменная для прерывания void setup() < pinMode(led1, OUTPUT); // Пятый пин на выход первый светодиод pinMode(led2, OUTPUT);// Шестой пин на выход второй светодиод attachInterrupt(buttonInt, change, RISING); // прерывание по мпадающему фронту Serial.begin(9600); // Для контроля >//обработчик прерывания void change() < regim = regim + 1; // С каждым разом увеличиваем regim на 1 if (regim >11) // Если regim больше 11 regim = 0;// То сбрасываем regim в 0 > // Тут проверкой if выбираються режимы работы светодиодов void loop() < if (regim == 0) Serial.println(«regim 0»); delay(250); //============================= if (regim == 1) < Serial.println(«regim 1»); delay(250); for (int i = 0; i < 3; i++) < digitalWrite(led1, HIGH); delay(50); digitalWrite(led1, LOW); delay(50); >delay(250); for (int i = 0; i < 3; i++) < digitalWrite(led2, HIGH); delay(50); digitalWrite(led2, LOW); delay(50); >> //============================== if (regim == 2) < Serial.println(«regim 2»); delay(500); for (int i = 0; i < 2; i++) < digitalWrite(led1, HIGH); delay(40); digitalWrite(led1, LOW); delay(60); >delay(500); for (int i = 0; i < 2; i++) < digitalWrite(led2, HIGH); delay(40); digitalWrite(led2, LOW); delay(60); >> //============================ if (regim == 3) < Serial.println(«regim 3»); delay(500); for (int i = 0; i < 3; i++) < digitalWrite(led1, HIGH); delay(50); digitalWrite(led1, LOW); delay(80); >delay(500); for (int i = 0; i < 3; i++) < digitalWrite(led2, HIGH); delay(50); digitalWrite(led2, LOW); delay(80); >> //====================== if (regim == 4) < Serial.println(«regim 4»); delay(150); for (int i = 0; i < 6; i++) < digitalWrite(led1, HIGH); delay(80); digitalWrite(led1, LOW); delay(80); >delay(150); for (int k = 0; k < 6; k++) < digitalWrite(led2, HIGH); delay(80); digitalWrite(led2, LOW); delay(80); >> //=========================== if (regim == 5) < Serial.println(«regim 5»); delay(70); for (int i = 0; i < 7; i++) < digitalWrite(led1, HIGH); delay(30); digitalWrite(led1, LOW); delay(70); >delay(70); for (int i = 0; i < 7; i++) < digitalWrite(led2, HIGH); delay(30); digitalWrite(led2, LOW); delay(70); >> //============================= if (regim == 6) < Serial.println(«regim 6»); delay(250); for (int i = 0; i < 8; i++) < digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); delay(40); digitalWrite(led1, LOW); digitalWrite(led2, LOW); delay(40); >> //============================== if (regim == 7) < Serial.println(«regim 7»); delay(400); for (int i = 0; i < 10; i++) < digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); delay(30); digitalWrite(led1, LOW); digitalWrite(led2, LOW); delay(100); >> //=============================== if (regim == 8) < Serial.println(«regim 8»); for (int i = 0; i < 255; i++) < analogWrite(led1, i); delay(3); >for (int i = 0; i < 3; i++) < digitalWrite(led1, HIGH); delay(50); digitalWrite(led1, LOW); delay(50); >for (int i = 255; i >= 0; i —) < analogWrite(led1, i); delay(3); >// Второй диод for (int i = 0; i for (int i = 0; i < 3; i++) < digitalWrite(led2, HIGH); delay(50); digitalWrite(led2, LOW); delay(50); >for (int i = 255; i >= 0; i —) < analogWrite(led2, i); delay(3); >> //=============================== if (regim == 9) < Serial.println(«regim 9»); for (int i = 0; i < 255; i++) < analogWrite(led1, i); analogWrite(led2, i); delay(3); >for (int i = 0; i < 3; i++) < digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); delay(50); digitalWrite(led1, LOW); digitalWrite(led2, LOW); delay(50); >for (int i = 255; i >= 0; i —) < analogWrite(led1, i); analogWrite(led2, i); delay(3); >> //==================================== if (regim == 10) < Serial.println(«regim 10»); for (int i = 0; i < 255; i++) < analogWrite(led1, i); delay(3); >for (int i = 0; i < 4; i++) < digitalWrite(led2, HIGH); delay(50); digitalWrite(led2, LOW); delay(50); >for (int i = 255; i >= 0; i —) < analogWrite(led1, i); delay(3); >// Второй диод for (int i = 0; i for (int i = 0; i < 4; i++) < digitalWrite(led1, HIGH); delay(50); digitalWrite(led1, LOW); delay(50); >for (int i = 255; i >= 0; i —) < analogWrite(led2, i); delay(3); >> //================================ if (regim == 11) < Serial.println(«regim 11»); for (int i = 0; i < 255; i++) < analogWrite(led1, i); delay(3); >for (int i = 255; i >= 0; i —) < analogWrite(led1, i); delay(3); >// Второй диод for (int i = 0; i for (int i = 255; i >= 0; i —) < analogWrite(led2, i); delay(3); >> > [/code]

  • Войдите на сайт для отправки комментариев
Читайте также:
Как в программе ворд сделать буклет

Источник: arduino.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru