|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
10.02.2014, 17:55 | #11 | |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
Имейте ввиду, что 0, который вводит потребитель с клавиатуры не есть двоичный ноль!
'0' == 0x30 '1' == 0x31 а вам надо 0x00 Соответственно в bool всегда записывается true. Именно true а не 1 или 0. Читайте из cin в char переменну и потом сравнивайте. char ch; cin >> ch; exit = ('0' == ch) ? true : false; Цитата:
На все остальное компилятор выдает предупреждение. Последний раз редактировалось Stilet; 10.02.2014 в 18:10. |
|
10.02.2014, 18:20 | #12 |
Старожил
Регистрация: 19.08.2009
Сообщений: 2,119
|
waleri
Имейте ввиду, что 0, который вводит потребитель с клавиатуры не есть двоичный ноль! и опять же, хорошие новости в том, что такое возможно только в низкокачественном китайском C++. В настоящем C++ оператор >> перегружен для типа bool и позволяет ввод только '0' или '1'. на выходе в переменной получаем false или true.
А вы почему со мной не соглашаетесь, у вас что, импотенция? (c) ACE Valery
|
10.02.2014, 21:44 | #13 | |
Форумчанин
Регистрация: 03.03.2013
Сообщений: 102
|
waleri
Цитата:
Но я думал, что логическая переменная работает так: - если условие истинно, все её биты устанавливаются в 1 (true). В переводе в десятичную систему счисления это (-1); - если условие ложно, все биты устанавливаются в 0 (false). В десятичную системе это, конечно, 0. |
|
10.02.2014, 22:35 | #14 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
bool занимает один байт, может быть true или false и при переводе в int дает 1 и 0 соответственно.
|
10.02.2014, 23:03 | #15 |
Форумчанин
Регистрация: 03.03.2013
Сообщений: 102
|
Спасибо. Вы, так сказать, удовлетворили моё любопытство.
Конечно, в разных языках программирования логические переменные ведут себя по-разному. В С++ случай удобный: bool весит 1 байт, 7 младших бит зарезервированы (равны нулю), младший бит принимает два значения 0 - ложь и 1 - истина. Я правильно понял? Я спрашиваю, потому что в начале темы автор сказал(а), что bool должна принимать любое число. |
10.02.2014, 23:04 | #16 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Если не ошибаюсь там схема следующая: Если все биты нули то это false, иначе true. Т.е. если хотя бы один из битов единица - уже true. Так что "bool должна принимать любое число. " правдивое утверждение.
I'm learning to live...
|
10.02.2014, 23:15 | #17 |
Форумчанин
Регистрация: 03.03.2013
Сообщений: 102
|
Жаль. Если бы там работала схема, предложенная мной, этим можно было бы объяснить почему не работает программа, когда с прямого ввода задаётся лог. пер. со значениями не 1 и не 0 и работает вариант, предложенный гражданином waleri:
Код:
|
11.02.2014, 09:16 | #18 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
Покажите мне код, где есть
bool val = 123; int test = val; и где test будет 123 Не путайте bool и BOOL. Как отметил Rififi, все будет работать, но только до того, как введете что-то отличное от 0 и 1 - тогда всегда возвращает всегда true а сам cin устанавливается в состояние ошибки. Последний раз редактировалось waleri; 11.02.2014 в 09:28. |
11.02.2014, 09:41 | #19 |
Linux C++ Qt ARM
Старожил
Регистрация: 30.11.2008
Сообщений: 3,030
|
Пепел Феникса
Вы немного путаете, это в ANSI C нет bool как такового (однако условные операторы считают ноль ложным условием, а все остальное истинным), а в плюсах оно все-таки есть.
Дилетант широкого профиля.
"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс |
11.02.2014, 12:04 | #20 | ||
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
Цитата:
и тип то примет любое число, да, только обратно уже нет. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
||
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Помогите разобраться с кодом! | 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 |