Поиск
 
 

Результаты :
 


Rechercher Расширенный поиск

Кто сейчас на форуме
Сейчас посетителей на форуме: 1, из них зарегистрированных: 0, скрытых: 0 и гостей: 1

Нет

[ Посмотреть весь список ]


Больше всего посетителей (9) здесь было Вс Фев 11, 2018 12:54 pm
Самые активные пользователи за неделю
Ярослав
 


switch goto

Перейти вниз

switch goto

Сообщение автор Ильдар в Чт Янв 12, 2017 12:22 pm

Ярослав, подскажи пожалуйста как правильно, нужно не выполнять case если условие не совпало.
Код:

 begin1:
   cin >> answer;
   
   switch (*answer)
   { 
   case 'h':
      if ('help' == 1) {
         cout << "sorry there are no tips" << endl;
         goto begin1;
      }
      --help;
      cout << "you have " << help << " tips." << endl;
      cout << "Your reply"<<endl;
      goto begin1;

Ильдар

Posts : 3
Join date : 2017-01-07

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: switch goto

Сообщение автор Ярослав в Чт Янв 12, 2017 12:52 pm

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

Не совсем понимаю, какой тип у переменной answer. От этого много зависит. string?

Тут лучше воспользоваться ветвлением if / else вместо switch. Switch используют, когда есть мультиветвление: нужно проверить значение одной переменной на равенство многим разным вариантам. А у нас случай проще: либо *answer равно 'h', либо нет.

В switch есть эквивалент else, это специальная метка default:

Код:
switch (переменная) {
case значение_1: // если переменная равна значению_1, то тогда
  код...
  break; // завершение ветки
default: // иначе
  код...
}

PS. Плохо 'help' == 1 <-- так не надо писать. В одинарных кавычках обычно помещают только 1 символ. Это будет литерал типа char, обозначающий этот одинокий символ. 'help' компилятор примет, но это будет большая целочисленная константа, не равная 1.
avatar
Ярослав
Admin

Posts : 500
Join date : 2016-12-21
Location : Москва

Посмотреть профиль http://itstep.forum2x2.ru

Вернуться к началу Перейти вниз

Re: switch goto

Сообщение автор Ильдар в Чт Янв 12, 2017 1:46 pm

на даном этапе работает, он возвращает и просит ввести ответ но если еще раз ввести help он опять выполняется. хочу сделать чтоб он не выполнялся если переменная уменьшилась.

Код:

nt main() {
   char answer[5]="";
   int help = 2;
   

Ильдар

Posts : 3
Join date : 2017-01-07

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: switch goto

Сообщение автор Ярослав в Чт Янв 12, 2017 2:01 pm

Проблема в условии if:

Код:
      if ('help' == 1) {
         cout << "sorry there are no tips" << endl;
         goto begin1;
      }

Видимо, хотелось обратиться к переменной help. Но если её заключить в кавычки, это будет не переменная. Это будет целочисленный литерал, составленный из ASCII кодов символов 'h', 'e', 'l' и 'p'. Эта константа никогда не равна 1, поэтому в if программа не заходит.

Чтобы обратиться к переменной по имени help, надо снять кавычки:
Код:
      if (help == 1) {
         cout << "sorry there are no tips" << endl;
         goto begin1;
      }

И кстати, проверять надо не на равенство единице. Когда число подсказок равно 1, подсказку ещё можно запросить. А вот если их не осталось (то есть 0), тогда нельзя.
avatar
Ярослав
Admin

Posts : 500
Join date : 2016-12-21
Location : Москва

Посмотреть профиль http://itstep.forum2x2.ru

Вернуться к началу Перейти вниз

Re: switch goto

Сообщение автор Ильдар в Чт Янв 12, 2017 2:12 pm

спасибо, получилось.

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

Ильдар

Posts : 3
Join date : 2017-01-07

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: switch goto

Сообщение автор Спонсируемый контент


Спонсируемый контент


Вернуться к началу Перейти вниз

Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения