0 / 0 / 0
Регистрация: 06.04.2022
Сообщений: 6
1

Как работает тернарный оператор

06.04.2022, 19:53. Показов 1455. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Что за условный знак и как и когда он применяется
" ? " , " : ", и ещё один " ^ ( ну я предполагаю что это ) "

пример


C++
1
2
3
int makeNegative(int num) {
    return num > 0 ? -num : num;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.04.2022, 19:53
Ответы с готовыми решениями:

Как работает тернарный оператор
Здравствуйте. Объясните, пожалуйста, что значит эта строка color = (color == 'W') ? 'B' : 'W';

Как в этом коде использовать тернарный оператор
Как в этом коде использовать тернарный оператор #include <iostream> #include <math.h> using...

Тернарный оператор
Добрый день, как доказать, что нету тенарного оператора ? Я как понимаю, есть только тенарная...

Тернарный оператор
Как расшифровать int j=(i%2) ? 1 ; 0;?

15
1352 / 851 / 365
Регистрация: 26.02.2015
Сообщений: 3,799
06.04.2022, 20:03 2
Лучший ответ Сообщение было отмечено AladBu как решение

Решение

?: это тернарный оператор. Т.е. ты можешь написать условный оператор полностью

C++
1
2
3
4
5
if (expression) {
    ...
} else {
    ...
}
А можно так expression ? 1 : 0; Если expression true, то такой оператор вернет 1, иначе - 0.

Добавлено через 19 секунд
Символ ^ в чистом C++ я не помню, чтобы использовался.
0
1709 / 1109 / 337
Регистрация: 25.01.2019
Сообщений: 2,910
06.04.2022, 20:24 3
Ещё стоит добавить что у тернарника одна удобная особенность: он возвращает объект(? хз как описать), короче с ним можно творить всякое
C++
1
2
3
4
5
6
    bool x { false };
    int f {};
    int d {};
 
    x ? f : d += 15;
    std::cout << f << " " << d;
Цитата Сообщение от AladBu Посмотреть сообщение
^
XOR?
2
1352 / 851 / 365
Регистрация: 26.02.2015
Сообщений: 3,799
06.04.2022, 20:29 4
Да, действительно, используется в битовых (побитовых?) операциях.
0
Вездепух
Эксперт CЭксперт С++
11691 / 6370 / 1723
Регистрация: 18.10.2014
Сообщений: 16,052
06.04.2022, 20:41 5
Цитата Сообщение от Folian Посмотреть сообщение
Ещё стоит добавить что у тернарника одна удобная особенность: он возвращает объект(? хз как описать), короче с ним можно творить всякое
C++
1
2
3
4
5
6
    bool x { false };
    int f {};
    int d {};
 
    x ? f : d += 15;
    std::cout << f << " " << d;
???

Этот пример не иллюстрирует никакого "он возвращает объект", потому что у ?: очень низкий приоритет. То есть здесь фактически написано

C++
1
x ? f : (d += 15);
и "возвращаемое" значение ?: здесь не используется и не играет никакой роли вообще.

Надо было

C++
1
(x ? f : d) += 15;
Вот это тогда действительно иллюстрировало бы тот факт, что ?: по возможности возвращает lvalue (только в С++, но не в С)
3
Nishen
06.04.2022, 20:43
  #6

Не по теме:

Хм, я вообще не знал про такое. Круто, но мне кажется, что так лучше не писать. :D

0
1709 / 1109 / 337
Регистрация: 25.01.2019
Сообщений: 2,910
06.04.2022, 20:48 7
TheCalligrapher, да, лажанул. Спасибо.
0
Вездепух
Эксперт CЭксперт С++
11691 / 6370 / 1723
Регистрация: 18.10.2014
Сообщений: 16,052
06.04.2022, 21:11 8
Цитата Сообщение от Nishen Посмотреть сообщение
Символ ^ в чистом C++ я не помню, чтобы использовался.
???
0
1352 / 851 / 365
Регистрация: 26.02.2015
Сообщений: 3,799
06.04.2022, 22:00 9
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
???
Цитата Сообщение от Nishen Посмотреть сообщение
Да, действительно, используется в битовых (побитовых?) операциях.
Уже поправили.
0
412 / 285 / 59
Регистрация: 09.03.2016
Сообщений: 2,499
06.04.2022, 23:08 10
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
WideCharToMultiByte(CP_ACP, 0, argv[1], -1, in_File, wcslen(argv[1]), NULL, NULL);
        in_File[wcslen(argv[1])] = '\0';
    char *ext = in_File + strlen(in_File) - 4;
    
int strnum = memcmp(ext, ".mp4", 4)==0 ? 0 :// Расширения которые подходят для обработки (это тернарник)
             memcmp(ext, ".avi", 4)==0 ? 0 :
             memcmp(ext, ".mp3", 4)==0 ? 0 : 1;
        if (strnum != 0)
              {
            CONSOLE_SCREEN_BUFFER_INFO   csbi; //------------------------ Изменение цвета шрифта
            GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi);// 10 | 12
            SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 11);
            printf("\n File with < %s > extension is not supported  ", ext);
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), csbi.wAttributes);//Восстановить исходные атрибуты 
                        _getch(); return 0;
               }
Добавлено через 44 секунды
Это тернарник, или хрен?
0
1709 / 1109 / 337
Регистрация: 25.01.2019
Сообщений: 2,910
06.04.2022, 23:14 11
Цитата Сообщение от Наталья8 Посмотреть сообщение
Это тернарник, или хрен?
Эт три вложенных вдруг-друга.
0
412 / 285 / 59
Регистрация: 09.03.2016
Сообщений: 2,499
09.04.2022, 03:29 12
Можно даже так
выражение являеться булевой переменной.

C++
1
2
3
4
5
6
7
8
9
char *ext = in_File + strlen(in_File) - 4;
    
if( memcmp(ext, ".mp4", 4)==0 ? 0 :// Расширения которые подходят для обработки (это тернарник)
    memcmp(ext, ".avi", 4)==0 ? 0 :
    memcmp(ext, ".mp3", 4)==0 ? 0 : 1)
                     {
            printf("\n File with < %s > extension is not supported  ", ext);
                            _getch(); return 0;
                     }
0
412 / 285 / 59
Регистрация: 09.03.2016
Сообщений: 2,499
09.04.2022, 03:30 13
Можно даже так
выражение являеться булевой переменной.

C++
1
2
3
4
5
6
7
8
9
char *ext = in_File + strlen(in_File) - 4;
    
if( memcmp(ext, ".mp4", 4)==0 ? 0 :// Расширения которые подходят для обработки (это тернарник)
    memcmp(ext, ".avi", 4)==0 ? 0 :
    memcmp(ext, ".mp3", 4)==0 ? 0 : 1)
                     {
            printf("\n File with < %s > extension is not supported  ", ext);
                            _getch(); return 0;
                     }
0
Вездепух
Эксперт CЭксперт С++
11691 / 6370 / 1723
Регистрация: 18.10.2014
Сообщений: 16,052
09.04.2022, 04:53 14
Цитата Сообщение от Наталья8 Посмотреть сообщение
Можно даже так
Непонятно только зачем транслировать готовые 0 и 1 в 0 и 1.

C++
1
2
3
if (memcmp(ext, ".mp4", 4) != 0 && 
    memcmp(ext, ".avi", 4) != 0 && 
    memcmp(ext, ".mp3", 4) != 0)
0
1352 / 851 / 365
Регистрация: 26.02.2015
Сообщений: 3,799
09.04.2022, 04:54 15
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <filesystem>
#include <iostream>
#include <set>
#include <string>
 
 
 
int main() {
 
    const std::set<std::string> extensions{ ".mp4", ".avi", ".mp3" };
 
    std::filesystem::path path("text.mp3");
 
    if (extensions.count(path.extension().string()) == 0) {
        std::cout << "File with " << path.extension().string()
            << " extension is not supported\n";
    }
 
    return 0;
 
}
0
412 / 285 / 59
Регистрация: 09.03.2016
Сообщений: 2,499
10.04.2022, 00:55 16
Начинаешь думать...
Код становиться всё меньше и получаеться красиво.
С чаем беда....

Добавлено через 3 минуты
И куда делся тернарник?
0
10.04.2022, 00:55
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.04.2022, 00:55
Помогаю со студенческими работами здесь

Тернарный оператор if
так записать нельзя? void chek(comp* top) { comp* tmp = top, *tmp1, *last; last =...

тернарный оператор
объясните понятным языком что это такое в с++ и пояснение почему так //r=большее число из 2х...

Тернарный оператор
Здравствуйте. Наткнулся на решение задачи по рекурсии и вот не могу понять, какая операция...

Тернарный оператор
Помогите решить дз. Спасибо 1. Напишите программу, которая считывает, введенные пользователем 2...

Тернарный оператор vs if/else
Зачем? Ведь, так элегантнее. Начало https://www.cyberforum.ru/cpp-beginners/thread718192.html

Альтернатива if (.) {.} (тернарный оператор)
блин запамятовал как это делается пишут вместо стандартной формы что то типа y &lt; x : x = m...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru