| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > установки флагов формата |
| Автор: jurgal 1.8.2007, 16:19 | ||
небольшой отрывок функции:
присваиваем переменной f установки флагов формата, и теперь вопрос: оператор & сравнивает поразрядно операнды, но ведь в f все установки флагов, а сравниваем мы её только с skipws, как может получиться, что выражение (f & ios::skipws) даст нам истину? |
| Автор: Kuvaldis 1.8.2007, 16:40 | ||
jurgal,
Идет ПОРАЗРЯДНОЕ "и". В С/С++ любое (!) ненулевое значение - это истина т.е. допустим, что flags = 1111 skipws = 0010 после & получим: 0010 != 0 -> поэтому это истина |
| Автор: JackYF 1.8.2007, 18:02 |
| Kuvaldis истину глаголит. Поэтому ставь "&&" место "&". |
| Автор: bsa 2.8.2007, 10:29 | ||
Проверка флагов осуществляется операцией побитной "И" (&), а не логической (&&)!!! |
| Автор: jurgal 2.8.2007, 14:03 | ||||
| снова вопрос по флагам =) когда использую функцию setiosflags(), то толку от неё нет никакого, т.е. ни ошибок при компилировании , ни каких либо изменений флагов на выводе:
результат получается: 1100, а когда меняю манипуляторы вот так:
то все в порядке, получаю правильный результат. Где ошибка в использовании функции setiosflags()? |
| Автор: bsa 2.8.2007, 15:07 | ||
Мне тоже интересно. Думаю, проблема из той же серии, что и:
|
| Автор: korbian 2.8.2007, 16:13 | ||
Делай так, и все ок
|
| Автор: jurgal 2.8.2007, 16:50 |
| в том то и дело, что если использовать манипуляторы так: cout << hex << showbase << 100 << endl; то все в порядке, т.е. 64 - результат, а функцией setiosflags() пользоваться не получается, т.е. она не форматирует вводимое число, а оставляет как есть в десятичной системе и без указания системы счисления: 100 |
| Автор: _stranger_ 2.8.2007, 18:33 | ||
а так все в порядке
видимо необходимо отчищать флаги... |