Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.03.2013, 12:36   #1
AcTiV
Пользователь
 
Регистрация: 25.12.2012
Сообщений: 40
По умолчанию структура выбора switch

я сначала выбираю 3(матем формулы), потом выбираю ромб, в результате оно автоматически пишет что я нажал 4 в этом выборе

но я только выбрал что буду выполнять действия с ромбом
почему мой выбор 4 switch (SelectToForOfGeom )
присваивается под этому выбору switch (SelectOption ) который мне ошибку выводит, а этого он не должен делать

это при том что я еще не вводил номер выбора
да, если он был что мне известно у ромбе и я нажал 4 , тогда я понимаю что макс выбор 3, но оно даже выбора не предоставляет, а сразу переходит к ошибке.

т.к. я еще не выбрал что мне известно в ромбе
вот скрин, думаю на скрине более яснее

AcTiV вне форума Ответить с цитированием
Старый 02.03.2013, 12:49   #2
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

AcTiV, телепаты в отпуске.

1. Предоставьте исходный код, который можно скопипастить и запустить на выполнение на своих локальных машинах.

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

Вот эта фраза, лично мне ни о чем не говорит:

"я сначала выбираю 3(матем формулы), потом выбираю ромб, в результате оно автоматически пишет что я нажал 4 в этом выборе"
_Bers вне форума Ответить с цитированием
Старый 02.03.2013, 12:58   #3
AcTiV
Пользователь
 
Регистрация: 25.12.2012
Сообщений: 40
По умолчанию

ок,

http://rghost.ru/private/44213347/7b...4df4ec93bc664d - сам код

проблема:
программа мне предоставляет выбор функций
я выбираю 3 (матем формулы). дальше...
я выбираю ромб (4 выбор) программа продолжает правильно выполнятся до
PHP код:
//формула ромба
        
case 4:
            
cout << "Что вам дано в задании про ромб?" << endl;
            
cout << "1 - высота и сторона\n" 
                
<< "2 - сторона и кут\n" 
                
<< "3 - 2 диагонали" << endl;
//==========дальше уже неправильно===========================================
            
switch (SelectOption)
            {
                
//известно сторону и высоту
                
case 1:
                    
cout << "Вам известно высоту и сторону" << endl;
                    
cout << "Введите сторону: " ;
                    
cin >> a;
                    
cout << "Введите высоту: " ;
                    
cin >> h;
                    
cout << "Площадь ромба = " << << endl;
                break;
                
//известно сторону и кут
                
case 2:
                    
cout << "Вам известно сторону и кут" << endl;
                    
cout << "Введите сторону: " ;
                    
cin >> a;
                    
cout << "Введите кут (sin): " ;
                    
cin >> l;
                    
cout << "Площадь ромба = " << pow((double)a2) * sin((double)l) << endl;
                break;
                
//известно 2 диагонали
                
case 3:
                    
cout << "Вам известно 2 диагонали" << endl;
                    
cout << "Введите первую диагональ: " ;
                    
cin >> b;
                    
cout << "Введите вторую диагональ: " ;
                    
cin >> ;
                    
cout << "Площадь ромба = " << (c) / << endl;
                break;
                default:
                    
cout << "\t\t\tНЕПРАВИЛЬНЫЙ ВВОД. Максимальный выбор 3" << endl;
                    
FormulsOfGeometrix();
                break;
            }
        break; 
в этом коде ясно, что если я нажму 4(выбор ромба) то напишет текст
PHP код:
cout << "Что вам дано в задании про ромб?" << endl;
            
cout << "1 - высота и сторона\n" 
                
<< "2 - сторона и кут\n" 
                
<< "3 - 2 диагонали" << endl
но дальше уже ошибка, но я должен был выбрать что мне известно у ромбе, а здесь сразу ошибка
PHP код:
default:
                    
cout << "\t\t\tНЕПРАВИЛЬНЫЙ ВВОД. Максимальный выбор 3" << endl;
                    
FormulsOfGeometrix();
                break; 

Последний раз редактировалось AcTiV; 02.03.2013 в 13:01.
AcTiV вне форума Ответить с цитированием
Старый 02.03.2013, 13:43   #4
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

я не увидел сам код. Ссылка у меня не открылась.


Выложите код вот сюда: http://liveworkspace.org/

Или просто прямо на форум
_Bers вне форума Ответить с цитированием
Старый 02.03.2013, 13:45   #5
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,365
По умолчанию

Уважаемый, а вы не можете код ТЕКСТОМ присылать? Тут программисты, а не компиляторы сидят. Или вы думаете, что кто-то будет ваше творение с картинки перенабирать? Уважайте время помогающих вам людей. А чтоб дальше вы не повторяли своих ошибок, вам штраф.

Поо теме: так бывает. Почему - хз, не копала так глубоко. Но иногда при операторе выбора, вложенном в оператор выбора берется введенное значение внешнего оператора выбора. Очистите поток ввода. Или сделайте пару getchar'ов
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать

Последний раз редактировалось ACE Valery; 02.03.2013 в 13:51.
ACE Valery вне форума Ответить с цитированием
Старый 02.03.2013, 13:50   #6
AcTiV
Пользователь
 
Регистрация: 25.12.2012
Сообщений: 40
По умолчанию

ссылка

вложенный файл
Вложения
Тип файла: txt Новый текстовый документ.txt (13.5 Кб, 126 просмотров)

Последний раз редактировалось AcTiV; 02.03.2013 в 13:52.
AcTiV вне форума Ответить с цитированием
Старый 02.03.2013, 14:08   #7
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Ага. Вижу. В общем смотри:

Код:
cout << "Вы выбрали развед 3. Геометрические формулы" << endl;
    cout << "Что бы выбрать, просто введите номер формулы и нажмите Enter" << endl;
    cout << "Список формул: \n"
        << "1)Площадь квадрата\n"
        << "2)Площадь прямоугольника\n"
        << "3)Площадь паралелограмма\n"
        << "4)Площадь ромба\n"
        << "5)Площадь трапеции\n"
        << "6)Площадь круга\n"
        << "7)Площадь эллипса\n"
        << "8)Площадь Равнобедренный треугольника\n"
        << "9)Площадь Равносторонний треугольника\n" << endl;

    cin >> SelectToForOfGeom;
вот здесь ты считал выбор пользователя.
И он привел тебя к ромбу:

Код:
case 4:
            cout << "Что вам дано в задании про ромб?" << endl;
            cout << "1 - высота и сторона\n"
                << "2 - сторона и кут\n"
                << "3 - 2 диагонали" << endl;
            switch (SelectToOption)
            { 
                 ...
Когда ты попадаешь в блок обработки ромба, ты нигде заного не спрашиваешь у пользователя его новый выбор. SelectToOption нигде не изменяется.
_Bers вне форума Ответить с цитированием
Старый 02.03.2013, 14:10   #8
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

То есть смотри, я тупо добавил возможность выбрать пункт меню:

Код:
//формула ромба
        case 4:
            cout << "Что вам дано в задании про ромб?" << endl;
            cout << "1 - высота и сторона\n"
                << "2 - сторона и кут\n"
                << "3 - 2 диагонали" << endl;
            cin >> SelectToOption; //                 <---- добавил
            switch (SelectToOption)
            {
                //известно сторону и высоту
                case 1:
                    cout << "Вам известно высоту и сторону" << endl;
                    cout << "Введите сторону: " ;
                    cin >> a;
                    cout << "Введите высоту: " ;
                    cin >> h;
                    cout << "Площадь ромба = " << a * h << endl;
                break;
                //известно сторону и кут
                case 2:
                    cout << "Вам известно сторону и кут" << endl;
                    cout << "Введите сторону: " ;
                    cin >> a;
                    cout << "Введите кут (sin): " ;
                    cin >> l;
                    cout << "Площадь ромба = " << pow((double)a, 2) * sin((double)l) << endl;
                break;
_Bers вне форума Ответить с цитированием
Старый 02.03.2013, 14:11   #9
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

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

инкапсулировать меню с возможностью выбора
_Bers вне форума Ответить с цитированием
Старый 02.03.2013, 14:15   #10
AcTiV
Пользователь
 
Регистрация: 25.12.2012
Сообщений: 40
По умолчанию

о спасибо большое, забыл, наверно вчера пересидел и на мелочь не обращал

p.s. я учту ваши пожелания насчет улучшения кода
AcTiV вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Оператор выбора switch rinoolik Помощь студентам 3 20.02.2013 16:00
оператор выбора Switch Fornarina Общие вопросы C/C++ 1 31.10.2010 12:56
Оператор выбора switch(C++) michal3003 Помощь студентам 2 06.09.2010 02:05