Как изменить 1 или 0 на истинный или ложный вывод

У меня есть это задание, которое я выполнил. Я использую логическое значение, чтобы оно печатало 1 или 0. Мой вопрос в том, как заставить его печатать true или false вместо 1 или 0.

Мой вывод:

1 = true, 0 = false
------------
c1 >= c2 : 1
c1 <= c2 : 0
c1 != c2 : 1
c1 < c2 : 0
c1 > c2 : 1
c1 == c2 : 0

Мой код

int main() 
{

    //Declearing the radii of 2 circles in order to compare
    Circle c1(7);
    Circle c2(6);



    //prints true or false in boolean so 1 or 0

    bool compare;
    cout << "1 = true, 0 = false" << endl;
    cout << "------------" << endl;

    compare = c1 >= c2;
    cout<< "c1 >= c2 : "<< compare << endl;

    compare = c1 <= c2;
    cout<< "c1 <= c2 : "<< compare << endl;

    compare = c1 != c2;
    cout << "c1 != c2 : " << compare << endl;

    compare = c1 < c2;
    cout<< "c1 < c2 : " << compare << endl;

    compare = c1 > c2;
    cout << "c1 > c2 : " << compare << endl;

    compare = c1 == c2;
    cout << "c1 == c2 : " << compare << endl;
    cout << endl;
    

}

Это многофайловая программа, поэтому я добавил только main.cpp. Мы будем очень признательны за любые советы.

(compare ? "true":"false")будет работать
pm100 28.11.2022 00:38

@ pm100 Сделайте это ответом.

lorro 28.11.2022 00:39

Другая возможность — std::boolalpha

Igor Tandetnik 28.11.2022 00:40

@ pm100 Я не думаю, что это работает. Я получаю сообщение об ошибке «main.cpp: 45: 19: предупреждение: результат выражения не используется [-Wunused-value]»

user20544996 28.11.2022 00:40

pm100 означает что-то вроде cout<< "c1 >= c2 : "<< (compare ? "true" : "false") << endl;, а не (compare ? "true":"false") как отдельное выражение (которое действительно ничего не даст).

Igor Tandetnik 28.11.2022 00:41

std::string s[] = { "ложь", "истина" }; std::cout << s[сравнить];

Allan Wind 28.11.2022 00:44

@AllanWind в этом примере я бы использовал const char* вместо этого, чтобы избежать накладных расходов на создание ненужных std::string объектов: const char* s[] = { "false", "true" };

Remy Lebeau 28.11.2022 02:40

@RemyLebeau Я на самом деле написал это первым, но решил, что единовременные накладные расходы не имеют большого значения. Обновите ответ только для вас :-)

Allan Wind 28.11.2022 02:43
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
8
101
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Похоже, у нас есть несколько хороших вариантов (упорядоченных по времени отправки):

  1. std::cout << (compare ? "true" : "false");
  2. std::cout << std::boolalpha << compare;
  3. const char *s[] = { "false", "true" }; std::cout << s[compare];

И я бы «проголосовал за дверь №1», потому что это сразу видно. Для любого из двух других, если бы я столкнулся с ним где-нибудь в производственном коде, «мне пришлось бы подумать». И в таких ситуациях я бы предпочел не делать этого. «Сделайте свой код максимально понятным».

Mike Robinson 28.11.2022 00:52

@MikeRobinson # 2 уважает локаль, а два других - нет. Так что, безусловно, есть повод для его использования.

Eric M Schmidt 28.11.2022 01:03

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

Allan Wind 28.11.2022 01:05

Я мог бы даже сделать это на C, если бы торопился, но для C++ это слишком грязно: const char *s = "false\0true"; size_t false_len = strlen(s) + 1; printf("%s", s + compare * false_len);

Allan Wind 28.11.2022 01:30

Один небольшой аргумент против std::boolalpha заключается в том, что он изменяет поток. В общем, было бы предпочтительнее оставить поток таким, каким вы его нашли. Но сохранение и восстановление этого состояния раздражает и быстро становится аргументом в пользу варианта №1. Тем не менее, boolalpha сам по себе — это то, что вы обычно хотите оставить включенным для потока. Но просто для полноты можно сделать std::cout << (std::ostringstream() << std::boolalpha << compare).str(). Самое простое, конечно, просто применить boolalpha в начале программы и больше никогда к ней не прикасаться.

paddy 28.11.2022 03:15

Другие вопросы по теме