Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Nostalgy
0 / 0 / 0
Регистрация: 05.11.2013
Сообщений: 5
#1

if в switch - C++

05.11.2013, 21:30. Просмотров 386. Ответов 9
Метки нет (Все метки)

Всем доброе время суток!!!

Сразу прошу прощения за возможное существование похожей темы, со схожей сутью вопроса.
google мне не в помощь,имхо не нашел схожей проблемы ( а только объяснения , что такое switch и с чем его едет ).

Учу язык по Шилдт Г. С++ Базовый курс, 3-е издание,2010.
В конце 4той главы есть исходник проги , звёздное число.
С использованием if ветвления и цикла do while, для практики я решил переписать на switch и for.
С For даже не пришлось изобретать велосипедист, а вот в switch дальше 1вого ( из 3х ) кейсов решить не могу.
(предполагаю что дело в константах case, но голова отказывается включать логику решения)

Собственно сам вопрос , как дописать 2 оставшиеся кейса (уже 2рой день только над этим бьюсь).

функция rand() работает не исправно потому что не поставлен таймер (ответ в оригинале 41 ,,, в моей 109, наверное где то нахимичил с циклами)

Оригинал :
Кликните здесь для просмотра всего текста

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
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
#include <iostream>
#include <cstdlib>
using namespace std;
 
void play(int m);
 
int main()
{    
  int option;
  int magic;
 
  magic = rand();
 
  do {
    cout << "1. Get a new magic number\n";
    cout << "2. Play\n";
    cout << "3. Quit\n";
    do {
      cout << "Enter your choice: ";
      cin >> option;
    } while(option<1 || option>3);
 
    switch(option) {
      case  1:
        magic = rand();
        break;
      case 2:
        play(magic);
        break;
      case 3:
        cout << "Goodbye\n";
        break;
    }
  } while(option!=3);
 
  return 0;
}
 
// Play the game.
void play(int m)
{
  int t, x;
 
  for(t=0; t<100; t++) {
    cout << "Guess the number: ";
    cin >> x;
    if(x==m) {
      cout << "** Right **\n";
      return;
    }
    else
      if(x<m) cout << "Too low.\n";
      else cout << "Too high.\n";    
  }
  cout << "You've used up all your guesses. Try again.\n";
}



моя : вот собственно они и есть case 'x<' : и case 'x>' : в самом конце кода ,на которых я застрял (константы назвал только для наглядности их "действия", не более)
Кликните здесь для просмотра всего текста

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
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
#include <iostream>
#include <cstdlib>
 
 
using namespace std;
 
 
void play ( int  m ) ;
 
int main()
{    
    int menu ;
    int nomer ;
 
    nomer = rand();
 
    //============================================
 
    for ( menu = 0 ;  menu !=3 ; )
    {
        cout << "1. Get a new magic number\n";
        cout << "2. Play\n";
        cout << "3. Quit\n";
 
   //============================================
 
        for ( menu = 0 ; menu < 1 || menu > 3 ; )
        {
            cout << "Enter your choice: ";
            cin >> menu;
        }
        //==========================================
 
        switch(menu) 
        {
 
        case  1:
            nomer = rand();
            break;
 
        case 2:
            play(nomer);
            break;
 
        case 3:
            cout << "Goodbye\n";
            break;
        }
        //=======================================
    } 
    system ( " pause " ) ;
    return 0;
}
 
// ========================================  Play the game.
 
void play(int m)
{
    int t, x;
 
    for(t=0; t<100; t++) 
    {
        std::cout << "Guess the number: ";
        cin >> x;
 
        //=================================================================
 
        switch (x)
        {
 
        case  'm' : 
            cout << "** Right **\n";
            return;
 
        case   'x<' :
 
            cout << "Too low.\n";
            break;
 
        case   'x>' :
            cout << "Too high.\n"; 
            break;
        }
    }
    cout << "You've used up all your guesses. Try again.\n";
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.11.2013, 21:30     if в switch
Посмотрите здесь:

Switch - C++
Простите за глупый вопрос, но можно ли в switch работать с действительными числами и если да то как?

switch - C++
Помогите!!

не выполняется switch - C++
первый вложенный цикл выполняется корректно, но второй - после выбора вылетает из программы, т.е. ввожу константу и все - блок {} не...

Оператор switch - C++
Зависит ли a) объектный код от порядка меток case и default в данном операторе? б) если ответ на первый вопрос положителен, то тогда...

Switch управление - C++
Здравствуйте. Компилятор (VS2015) пишет ошибку &quot;передача управления в обход инициализации: переменная &quot;а&quot;&quot;. Почему случилось, как...

Выход из switch - C++
Здравствуйте) Листаю учебник &quot;cpp для чайников&quot; и параллельно пытаюсь добавить что-нибудь из выученного в игру, типа &quot;угадай число&quot;....

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Folko
265 / 253 / 7
Регистрация: 27.09.2013
Сообщений: 877
Записей в блоге: 1
05.11.2013, 21:54     if в switch #2
Nostalgy, у switch есть не только case 1: case 2: но и default: в эту ветку попадают все значения, не указанные с помощью case. То есть пишете
C++
1
2
3
4
5
6
7
8
9
10
switch(t)
{
case 1: cout << "1\n";
break;
case 2: cout << "2\n";
break;
case 3: cout << "3\n";
break;
default: cout << "Other number\n";
}
Nostalgy
0 / 0 / 0
Регистрация: 05.11.2013
Сообщений: 5
05.11.2013, 22:27  [ТС]     if в switch #3
Цитата Сообщение от Folko Посмотреть сообщение
Nostalgy, у switch есть не только case 1: case 2: но и default: в эту ветку попадают все значения, не указанные с помощью case. То есть пишете
C++
1
2
3
4
5
6
7
8
9
10
switch(t)
{
case 1: cout << "1\n";
break;
case 2: cout << "2\n";
break;
case 3: cout << "3\n";
break;
default: cout << "Other number\n";
}
Спасибо фолк! default я тоже уже замучил, дело в том что эти два кейса делают разные вещи,а default будет выводить всё и разу что в нём находится ,не разделяя опции выполнения,, как то так.
Folko
265 / 253 / 7
Регистрация: 27.09.2013
Сообщений: 877
Записей в блоге: 1
05.11.2013, 22:36     if в switch #4
Nostalgy, то есть вы хотите реализовать угадывание числа без if? Со switch я не задумывался даже, но вот можно например создать массив (с количеством элементов, равных возможным вариантам). В цикле назначаете всем элементам значение -1, потом делаете a[rand()%n] = 0. И потом прибавляете к своему количеству "жизней" элемент с индексом, равным введенному числу. А в switch обработаете реакцию на понижение жизней (вплоть до gameover)
Nostalgy
0 / 0 / 0
Регистрация: 05.11.2013
Сообщений: 5
05.11.2013, 23:14  [ТС]     if в switch #5
Folko ,

да , только с использованием switch ( но начинает казаться что это не возможно ) . попробую сделать как вы сказали (если мозгов конечно хватит , всего только 3тий месяц изучаю), ну всё таки .это будет уже не то)))) просто думал что есть какие то хитрости. тобиш switch выигрывает только в скорости и читабельности (когда if
в более лёгком построении и реализации ) ?
Спасибо!
Folko
265 / 253 / 7
Регистрация: 27.09.2013
Сообщений: 877
Записей в блоге: 1
05.11.2013, 23:17     if в switch #6
Nostalgy, switch полезен когда множество веток. Гораздо проще запилить 8 веток в switch, чем 6-7 if'ов.
Nostalgy
0 / 0 / 0
Регистрация: 05.11.2013
Сообщений: 5
05.11.2013, 23:30  [ТС]     if в switch #7
с этим тоже сталкивался когда писал мини танчики. Когда с if в корень запутался, решил переписать на switch и опять же проблемы с ним были, но только не такие критичные как сейчас не работал только один кейс из 7, мне
пришлось использовать goto принудительно..(знаю не красиво),,,

Кликните здесь для просмотра всего текста

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
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
switch (act)    
    {
 
    case 75: //====================================== влево
        map[x][y] = ' '; 
        map[7][15] = 'C';
        y--;  
        if (y<1)y++;
        map[x][y] = 'Т';
        kl++;  
        benzin--;
        if (x==7&y==15)benzin=100;
        break;
 
 
    case 77: //====================================== вправо
        map[x][y] = ' ';
        map[7][15] = 'C';
        y++; 
        if (y>18)y--;
        map[x][y] = 'Т'; 
        kl++;
        benzin--;
        if (x==7&y==15)benzin=100;
        break;
 
 
    case 72: //====================================== вверх
        map[x][y] = ' ';
        map[7][15] = 'C';
        x--;
        if (x<1)x++;
        map[x][y] = 'Т'; 
        kl++;
        benzin--;
        if (x==7&y==15)benzin=100;
        break;
 
 
    case 80: //====================================== вниз
        map[x][y] = ' ';
        map[7][15] = 'C';
        x++; 
        if (x>13)x--;
        map[x][y] = 'Т'; 
        kl++;
        benzin--;
        if (x==7&y==15)benzin=100;
        break;
 
 
    case 27: //====================================== ESC
        cout << "Bы действительно хотите выйти??????????\n\n";
        system("pause");
        exit(0);
            break;
 
 
    case 'exit':
        benzin: ; //:::::::::::::::::::::::::::::::: <<< == jump in [exit]
        cout << "game over!!!!!!!!!!!!!\n\n";
        system ("pause");
        exit(0);
        break;
 
        
    default:
        if (benzin == 0 ) goto benzin;   //::::::::: jump to [exit] == >>>
        break;
    } 
}
Folko
265 / 253 / 7
Регистрация: 27.09.2013
Сообщений: 877
Записей в блоге: 1
05.11.2013, 23:37     if в switch #8
Nostalgy, странно. Хотя у меня тоже иногда бывает, что мудохаюсь над каким то простым кодом полдня.
ValeryS
Модератор
6551 / 5017 / 463
Регистрация: 14.02.2011
Сообщений: 16,735
05.11.2013, 23:40     if в switch #9
Цитата Сообщение от Nostalgy Посмотреть сообщение
пришлось использовать goto принудительно..(знаю не красиво),,,
нет конечно
вот так было бы лучше

C++
1
2
3
4
5
6
7
8
9
10
    default:
        if (benzin != 0 )    //если 0 то проваливаемся в ветку exit
               break;
         
case 'exit':
     
        cout << "game over!!!!!!!!!!!!!\n\n";
        system ("pause");
        exit(0);
        break;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.11.2013, 23:52     if в switch
Еще ссылки по теме:

Оператор switch - C++
Оператор switch: 1)Написать программу, где ожидается ввод символа с клавиатуры, после чего определяется, является ли этот символ буквой,...

через switch - C++
Даны 2 числа определяющие невисокосный год, D(день) и M(месяц). Определите D и М следующего за этой датой.

Operator switch - C++
помогите пожалуйста.. Разработать программу, которая выводит на экран дисплея сообщения о значениях функции при различных значениях...

Переделать else if на switch - C++
Задание: Написать программу вычисления следующих функций: y= |q|,q&lt;1 y= 0,q=-1 y=q+2q,q&lt;-1 #include&lt;iostream.h&gt; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Nostalgy
0 / 0 / 0
Регистрация: 05.11.2013
Сообщений: 5
05.11.2013, 23:52  [ТС]     if в switch #10
ValeryS !!!!!!!!!!!!!!!!!!!!!!

и всё??????? я 5 дней сидел без результатно , вытворяя камасутру с клавой и мышкой,,,,
Уважил,,Спасибо (sorry за имоции),,,
Yandex
Объявления
05.11.2013, 23:52     if в switch
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru