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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.02.2014, 15:27   #1
marenko.lilia
Пользователь
 
Аватар для marenko.lilia
 
Регистрация: 25.12.2013
Сообщений: 91
По умолчанию Помогите разобраться с кодом - вопрос по типу данных bool

есть такой код:
Код:
#include <iostream>
using namespace std;
 
//определяем перечисление
enum level {parking, supermarket, hardwareStores, boutiques, sportSpa, clubRestaurantBar};
 
int main()
{
    setlocale(LC_ALL, "rus");
 
    level floor = parking;//переменная типа перечисления level
    //level floor = 0; не скомпилируется
    int fl = floor;//выбор этажа пользователем 
    bool exit = true;//выбор пользователя - выйти и продолжить
 
    cout << "\n\t$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n\n";
    cout << "\tДобро пожаловать в наш торгово-развлекательный центр MALL!!!\n";
    cout << "\tПредлагаем Вам проехаться в лифте и посетить все этажи!\n\n";
    cout << "\t$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n\n";
 
    while(exit)//пока exit равен true(1)
    {
        cout << "\nНажмите кнопку с номером этажа (от 0 до 5): ";
        cin >> fl;
 
        switch(fl)
        {
        case(parking):
        cout << "\aВы спустились в паркинг!!!" << endl;
        break;
 
        case(supermarket):
        cout << "\aВы на первом этаже!";
        cout << "\nЗдесь вы можете посетить наш супермаркет и купить продукты и товары для дома.\n\n";
        break;
 
        case(hardwareStores):
        cout << "\aВы на втором этаже!";
        cout << "\nЗдесь расположились магазины бытовой техники, IT  и мобильных телефонов.\n\n";
        break;
 
        case(boutiques):
        cout << "\aВы на третьем этаже!";
        cout << "\nЗдесь вас ждет незабываемый шопинг! Одежда, обувь, магазины косметики.\n\n";
        break;
 
        case(sportSpa):
        cout << "\aВы на четвертом этаже!";
        cout << "\nЗдесь вы можете посетить бассейн, каток, спортзалы, spa-салон!\n\n";
        break;
 
        case(clubRestaurantBar):
        cout << "\aВы на пятом этаже!";
        cout << "\nТут вы можете посетить ночной клуб, бар и ресторан!\n\n";
        break;
 
        default: cout << "\a\a\aОшибка! У нас только 5 этажей!\n\n"; 
        }
 
        cout << "Если хотите выйти на этом этаже, нажмите 0.\n";
        cout << "Продолжить увлекательную поездку - нажмите 1: ";
        cin >> exit;
    }  
return 0;
}
Переменная exit типа bool должна, по идее, принимать как правду любое число, кроме 0. Но в этой программе если ввести в эту переменную не 0 и не 1 - программа зацикливается. Почему так происходит?
marenko.lilia вне форума Ответить с цитированием
Старый 10.02.2014, 15:33   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

скорее всего это особенность cin.
запросите через временный int, и потом из него уже bool.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 10.02.2014, 15:33   #3
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

marenko.lilia

Но в этой программе если ввести в эту переменную не 0 и не 1 - программа зацикливается. Почему так происходит?

потому что при неправильном вводе в потоке (cin) остается запомненная ошибка. пока эта ошибка не будет вручную сброшена, новые данные вводить нельзя.
Rififi вне форума Ответить с цитированием
Старый 10.02.2014, 15:46   #4
marenko.lilia
Пользователь
 
Аватар для marenko.lilia
 
Регистрация: 25.12.2013
Сообщений: 91
По умолчанию

Rififi, то есть например

bool exit;
exit = 2;

это ошибка?
marenko.lilia вне форума Ответить с цитированием
Старый 10.02.2014, 15:49   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от marenko.lilia Посмотреть сообщение
Rififi, то есть например

bool exit;
exit = 2;

это ошибка?
cin>>exit;
и exit = 2;
совершенно разные вещи.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 10.02.2014, 15:51   #6
Haric_110
Форумчанин
 
Регистрация: 03.03.2013
Сообщений: 102
По умолчанию

Как я думаю, переменные типа bool принимают только два значения: 0 и -1 или это не всегда так?
Haric_110 вне форума Ответить с цитированием
Старый 10.02.2014, 15:51   #7
marenko.lilia
Пользователь
 
Аватар для marenko.lilia
 
Регистрация: 25.12.2013
Сообщений: 91
По умолчанию

Спасибо. Буду дорабатывать код
marenko.lilia вне форума Ответить с цитированием
Старый 10.02.2014, 15:58   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от Haric_110 Посмотреть сообщение
Как я думаю, переменные типа bool принимают только два значения: 0 и -1 или это не всегда так?
типа bool как таковое вообще не существует.
обычно это n-байтовая переменная(1-2-4)
0 которое соответствует false, а true это все остальное.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 10.02.2014, 16:00   #9
Haric_110
Форумчанин
 
Регистрация: 03.03.2013
Сообщений: 102
По умолчанию

Принял к сведению.
Haric_110 вне форума Ответить с цитированием
Старый 10.02.2014, 16:28   #10
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Пепел Феникса

типа bool как таковое вообще не существует.

и давно отменили? или ты про китайский С++? :laugh:
Rififi вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите разобраться с кодом! sid Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 13.04.2010 17:53
помогите разобраться с кодом samosval Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 27.12.2007 00:20
Помогите разобраться с кодом С++ Noor Помощь студентам 20 10.10.2007 17:42