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

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

Войти
Регистрация
Восстановить пароль
 
Escapable
54 / 54 / 1
Регистрация: 09.11.2010
Сообщений: 120
#1

Something about "goto" - C++

26.12.2010, 01:26. Просмотров 335. Ответов 6
Метки нет (Все метки)

Накидал следующую прогу. Насколько я знаю, использовать оператор безусловного перехода считается дурным тоном но я так и не могу догнать как, в данном случае, можно обойтись без него? Как еще можно завершить выполнение внутреннего цикла? Если использовать "break", то программа будет продолжаться дальше и выводить не нужные символы.
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
#include <iostream>
using namespace std;
 
int main()
{
    char ch;
 
    for(;;)
    {
 
        cin >> ch;
 
        if (ch == '.')  
        {
            cout << "Done!" << endl;
            break; 
        }
        
        // Из верхнего регистра в нижний
        while(ch >= 65 && ch < 97) 
        {
            ch += 32;
            cout << ch << endl;
            goto exit; // ??
        }
 
        // Из нижнего регистра в верхний 
        while(ch >= 97 && ch < 122) 
        {
            ch -= 32;
            cout << ch << endl;
        }
    exit:   ; 
    }
 
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.12.2010, 01:26     Something about "goto"
Посмотрите здесь:

Удвоить каждую встречающуюся "о" и "а" в строке C++
C++ Проверить, есть ли в слове приставка "пре" или "пре".
Указатели. Необработанное исключение в "0x77c015de" ": 0x00000000: Операция успешно завершена C++
C++ количество строк начинающих на "А" и заканчивающиеся на "и"
Найти в строке слово, начинающееся буквой "а" и оканчивающееся буквой "я" C++
C++ Проверить, встрачается ли в заданном тексте буква "а" чаще, чем буква "b"
C++ Заменить "fopen" в c++ на "TOpenDialog" в Builder6
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ISergey
Maniac
Эксперт С++
1347 / 880 / 52
Регистрация: 02.01.2009
Сообщений: 2,645
Записей в блоге: 1
26.12.2010, 01:52     Something about "goto" #2
хм... а зачем такие мансы?!

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 // Из верхнего регистра в нижний
                while(ch >= 65 && ch < 97) 
                {
                        ch += 32;
                        cout << ch << endl;
                        goto exit; // ??
                }
 
                // Из нижнего регистра в верхний 
                while(ch >= 97 && ch < 122) 
                {
                        ch -= 32;
                        cout << ch << endl;
                }
besstiaa
93 / 93 / 7
Регистрация: 04.06.2010
Сообщений: 223
26.12.2010, 01:53     Something about "goto" #3
Хм... зачем тут вообще использование while? Циклов даже и не предполагается. Используйте if...else, вопрос отпадет сам собой. А обойтись без goto можно всегда
Escapable
54 / 54 / 1
Регистрация: 09.11.2010
Сообщений: 120
26.12.2010, 02:12  [ТС]     Something about "goto" #4
Оу... Моя оплошность. Действительно с if/else все замечательно выходит. Ну все таки интересно, а как выйти из глубоко-глубоко вложенного цикла без "goto"? Или тут надо смотреть по обстоятельствам?
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
26.12.2010, 02:17     Something about "goto" #5
Escapable,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int main()
{
    while(1)
    {
       while(1)
       {
          while(1)
          {
              if(//something)
                  throw 0;
          }
       }
    }
    catch(...)
    {
    }
    return 0;
}
vx5
187 / 171 / 4
Регистрация: 04.09.2010
Сообщений: 656
26.12.2010, 02:38     Something about "goto" #6
ForEveR, мне кажется вы пропустили try
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int main()
{
    while(1)
    try{
       while(1)
       {
          while(1)
          {
              if(//something)
                  throw 0;
          }
       }
    }
    catch(...)
    {
    }
    return 0;
}
Добавлено через 3 минуты
Цитата Сообщение от Escapable Посмотреть сообщение
Оу... Моя оплошность. Действительно с if/else все замечательно выходит. Ну все таки интересно, а как выйти из глубоко-глубоко вложенного цикла без "goto"? Или тут надо смотреть по обстоятельствам?
можно еще структурировать вашу программу и впихать ваши циклы в функцию. return из любого места вернет вас обратно в вызывающую функцию.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.12.2010, 02:46     Something about "goto"
Еще ссылки по теме:

Замена "conio.h" и "gotoXY" в Xcode C++
C++ В строке заменить буквосочетания "ой" на "эх!"
Удалить все буквы "X" и "Y" C++
Проверяю, являются ли 4 строки стихом. "й" принимает за "и", тем самым принимает за слог C++
C++ Зачем нужны "set" и "get" в классах

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

Или воспользуйтесь поиском по форуму:
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
26.12.2010, 02:46     Something about "goto" #7
vx5, Да) Действительно
Yandex
Объявления
26.12.2010, 02:46     Something about "goto"
Ответ Создать тему
Опции темы

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