浅谈三目运算符(c++)

2023-10-31

什么是三目运算符

三目运算符是分支结构中的一种运算,根据不同的条件,执行不同的操作并返回不同的值。

语法:retvalue = expression ? retvalue1 : retvalue2;

如果表达式 expression 的值为真,那么就返回 retvalue1,否则,就返回 retvalue2。

也可以分开写:expression ? retvalue = retvalue1 : retvalue = retvalue2;

三目运算符怎么用

基本用法

我们看一下三目运算符与if语句的关系。

if语句:

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int a,b;
	cin>>a>>b;
	if(a>b) cout<<a;
	else cout<<b;
    return 0;
}

三目运算符:

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int a,b;
	cin>>a>>b;
	a>b?cout<<a:cout<<b;
    return 0;
}

if(a>b) cout<<a;
else cout<<b;

对应着

a>b?cout<<a:cout<<b;

说明:

a>b?cout<<a:cout<<b 表示如果 a>b 为真,输出 a a a,否则输出 b b b

进阶用法

嵌套用法,见下。

a>b?printf(">"):(a==b?printf("="):printf("<"));

对应着

if(a>b) printf(">");
else
{
	if(a==b) printf("=");
	else printf("<");
}

以上代码为 B2039 整数大小比较 的部分代码。

注意事项

  1. 三目运算符的运算优先级低于关系运算符和算术运算符,但高于赋值符。因此 max=(a>b)?a:b 可以去掉括号而写为 max=a>b?a:b
  2. 三目运算符 ?: 是一对运算符,不能分开单独使用。
  3. 三目运算符的结合方向是自右至左。
  4. 三目运算符两种情况的返回值需要相同。(见此题

相关题目

B2035 判断数正负

https://www.luogu.com.cn/problem/B2035

给定一个整数 N N N,判断其正负。如果 N > 0 N>0 N>0, 输出 positive ; 如果 N = 0 N=0 N=0, 输出 zero ; 如果 N < 0 , N<0, N<0, 输出 negative

代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
	long long n;
	cin>>n;
//	if(n>0) cout<<"positive";
//	if(n==0) cout<<"zero";
//	if(n<0)  cout<<"negative";
	cout<<(n>0?"positive":(n==0?"zero":"negative"));
    return 0;
}

B2037 奇偶数判断

https://www.luogu.com.cn/problem/B2037

给定一个整数,判断该数是奇数还是偶数。如果 n n n 是奇数,输出 odd;如果 n n n 是偶数,输出 even

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n;
	cin>>n;
//	if(n&1) cout<<"odd";
//	else cout<<"even";
	cout<<(n&1?"odd":"even");
    return 0;
}

B2052 简单计算器

https://www.luogu.com.cn/problem/B2052

代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int a,b;
	char c;
	cin>>a>>b>>c;
	c=='+'?cout<<a+b:(c=='-'?cout<<a-b:(c=='*'?cout<<a*b:(c=='/'?(b!=0?cout<<a/b:cout<<"Divided by zero!"):cout<<"Invalid operator!")));
    return 0;
}

注意:这道题有个小坑。

如果你写成了

cout<<(c=='+'?a+b:(c=='-'?a-b:(c=='*'?a*b:(c=='/'?(b!=0?a/b:"Divided by zero!"):"Invalid operator!"))));

会编译错误,出现

[Error] operands to ?: have different types 'int' and 'const char*'

是因为三目运算符两种情况的返回值需要相同。

遇到此种情况,将代码改为

cout<<(c=='+'?a+b:(c=='-'?a-b:(c=='*'?a*b:(c=='/'?(b!=0?a/b:"Divided by zero!"):"Invalid operator!"))));

或者老老实实写 if 语句吧!

创作不易,希望点赞+收藏。

关注作者 PineappleSummer,学习更多实用算法知识!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

浅谈三目运算符(c++) 的相关文章

  • 为什么libc++的shared_ptr实现使用完整内存屏障而不是宽松内存屏障?

    在boost的实现中shared ptr 它用放松内存排序以增加其引用计数 https github com boostorg smart ptr blob master include boost smart ptr detail sp
  • ASP.NET MVC 中的经典 ASP (C#)

    我有一个应用程序想要 最终 转换为 ASP NET MVC 我想要进行全面的服务升级 到 ASP NET 但想要使用当前的 ASP 内容来运行当前的功能 这样我就可以在对新框架进行增量升级的同时升级小部分 该站点严重依赖于不太成熟的 VB6
  • 如何创建可以像 UserControl 一样编辑的 TabPage 子类?

    我想创建一个包含一些控件的 TabPage 子类 并且我想通过设计器来控制这些控件的布局和属性 但是 如果我在设计器中打开子类 我将无法像在 UserControl 上那样定位它们 我不想创建一个带有 UserControl 实例的 Tab
  • 32 位应用程序的特征最大矩阵大小

    所以 我正在寻找Eigen http eigen tuxfamily org index php title Main Page当我尝试声明大于 10000x10000 的矩阵时 包崩溃 我需要声明一个像这样的矩阵 可靠地大约有 13000
  • 使用post方法将多个参数发送到asp.net core 3 mvc操作

    使用 http post 方法向 asp net mvc core 3 操作发送具有多个参数的 ajax 请求时存在问题 参数不绑定 在 dot net 框架 asp net web api 中存在类似的限制 但在 asp net mvc
  • C# 中的接口继承

    我试图解决我在编写应用程序时遇到的相当大的 对我来说 问题 请看这个 为了简单起见 我将尝试缩短代码 我有一个名为的根接口IRepository
  • Clang 编译器 (x86):80 位长双精度

    我正在尝试在 x86 Windows 平台上使用本机 80 位长双精度 海湾合作委员会选项 mlong double 80 https gcc gnu org onlinedocs gcc x86 Options html似乎不适用于 cl
  • 显示异常时的自定义错误消息:从客户端检测到潜在危险的 Request.Form 值

    我在我的 Web 应用程序中使用 ASP NET 的登录控件 当发生此异常时 我想在标签上显示一种有趣的错误类型System Web HttpRequestValidationException A potentially dangerou
  • POCO HTTPSClientSession 发送请求时遇到问题 - 证书验证失败

    我正在尝试使用 POCO 库编写一个向服务器发出 HTTPS 请求的程序 出于测试目的 我正在连接到具有自签名证书的服务器 并且我希望允许客户端进行连接 为了允许这种情况发生 我尝试安装InvalidCertificateHandler这是
  • 暂停下载线程

    我正在用 C 编写一个非常简单的批量下载程序 该程序读取要下载的 URL 的 txt 文件 我已经设置了一个全局线程和委托来更新 GUI 按下 开始 按钮即可创建并启动该线程 我想要做的是有一个 暂停 按钮 使我能够暂停下载 直到点击 恢复
  • 访问者和模板化虚拟方法

    在一个典型的实现中Visitor模式 该类必须考虑基类的所有变体 后代 在许多情况下 访问者中的相同方法内容应用于不同的方法 在这种情况下 模板化的虚拟方法是理想的选择 但目前这是不允许的 那么 模板化方法可以用来解析父类的虚方法吗 鉴于
  • 基于xsd模式生成xml(使用.NET)

    我想根据我的 xsd 架构 cap xsd 生成 xml 文件 我找到了这篇文章并按照说明进行操作 使用 XSD 文件生成 XML 文件 https stackoverflow com questions 6530424 generatin
  • 如何重置捕获像素的值

    我正在尝试创建一个 C 函数 该函数返回屏幕截图位图中每四个像素的 R G 和 B 值 这是我的代码的一部分 for int ix 4 ix lt 1366 ix ix 4 x x 4 for int iy 3 iy lt 768 iy i
  • 生产代码中的 LRU 实现

    我有一些 C 代码 需要使用 LRU 技术实现缓存替换 目前我知道两种实现LRU缓存替换的方法 每次访问缓存数据时使用时间戳 最后比较替换时的时间戳 使用缓存项的堆栈 如果最近访问过它们 则将它们移动到顶部 因此最后底部将包含 LRU 候选
  • 在 C 中使用 GNU automake 中的解析器

    我是 GNU autotools 的新手 在我的项目中使用了 lex 和 yacc 解析器 将它们作为 makefile am 中的源代码会产生以下错误 配置 in AC CHECK PROGS YACC bison yacc none i
  • 什么是 __declspec 以及何时需要使用它?

    我见过这样的例子 declspec在我正在阅读的代码中 它是什么 我什么时候需要使用这个构造 这是 Microsoft 对 C 语言的特定扩展 它允许您使用存储类信息来赋予类型或函数属性 文档 declspec C https learn
  • 转到定义:“无法导航到插入符号下的符号。”

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 我今天突然开始在我的项目中遇到一个问题 单击 转到定义 会出现一个奇怪的错误 无法导航到
  • 使用 CSharpCodeProvider 类编译 C# 7.3 的 C# 编译器版本是什么?

    我想使用 Microsoft CSharp CSharpCodeProvider 类来编译 C 7 3 代码 编译器版本在 IDictionary 中指定 在创建新的 CSharpCodeProvider 时将其作为输入 例如 Compil
  • 使用 Crypto++ 获取 ECDSA 签名

    我必须使用 Crypto 在变量中获取 ECDSA 签名 我在启动 SignMessage 后尝试获取它 但签名为空 我怎样才能得到它 你看过 Crypto wiki 吗 上面有很多东西椭圆曲线数字签名算法 http www cryptop
  • 错误:无效使用不完整类型“类 Move”/未定义对 Move::NONE 的引用

    拜托 我不知道为什么这个简单的代码被拒绝 它给了我 2 个编译错误 请帮帮我 I use 代码 块 20 03 我的编译器是GNU GCC 移动 hpp class Move public Move Move int int public

随机推荐

  • 手机把网页保存为html,怎么保存整个网页

    手机评站网今天精心准备的是 怎么保存整个网页 下面是详解 如何另存整个网页 如何另存整个网页 如何另存整个网页 1 在手机桌面中找到手机百度 点击打开手机百度 如下图所示 2 在手机百度中找到自己想要另存为的网页 点击进入该网页如下图所示
  • Visual Studio运行程序执行太快,看不到运行屏幕的结果,设置项目属性解决。

    一 右击项目 找到属性 二 找到链接器 三 链接器中找到子系统 子系统 选择控制台 SUBSYSTEM CONSOLE 应用 确定即可 四 也可以补充getchar 可以利用从键盘获取一个字符 来显示调试窗口
  • C++ 二叉树序列化与反序列化

    本人微信公众号 CPP进阶之旅 如果觉得这篇文章对您有帮助 欢迎关注 CPP进阶之旅 学习更多技术干货 C 二叉树序列化与反序列化 1 题目要求 2 题目说明 3 核心问题 4 解题思路 5 代码实现 6 问题扩展 7 重要说明 1 题目要
  • 从源码出发浅析 Android TV 的焦点移动原理(下篇)

    转自 https cloud tencent com developer article 1006297 2 2 findNextFocus 如果开发者没有指定nextFocusId 则用findNextFocus找指定方向上最近的视图看一
  • 方差、协方差、期望、相关系数等概念集合

    首先说明一下 本文是本人在复习方差等相关知识的过程中 通过网络上的相关讲解 进行个人总结后得到的 并非个人原创 在此发布只是为了作为一个学习记录与大家分享 1 期望 试验中可能出现的值及其概率的乘积 即是数学期望 1 离散型 离散型随机变量
  • git add 命令详解

    1 前言 2 git add 基本操作 3 git add 命令参数 4 git add 背后做了什么 1 前言 众所周知 git 中有工作区 暂存区 版本库三大组成部分 工作区 电脑中能看到的目录 也就是写代码的地方 暂存区 英文叫 st
  • vue3中通过自定义指令,实现点击空白处触发事件,点击非自身dom触发事件

    我们经常在开发过程中 会遇到这些问题 怎么实现点击空白处关闭指定盒子 怎么实现点击空白处收起下拉框 即 怎么触发点击空白处事件 怎么触发 点击非自身dom而触发的事件 在vue3当中 使用自定义指令解决这个问题 在utils directi
  • 开启network-manager.service

    ubuntu20 04 本身系统会默认开机自动连接网络服务 但是我之前自己设置关闭了 所以现在要手动打开使用一下命令 先进入root xxz sudo systemctl start network manager service 回车执行
  • 《一》HI3518E视频处理基础知识----- 系统控制mpp

    目录 一 MPP的概述 1 视频方面 2 音频方面 3 MPP所处层次框架图 二 mpp处理平台架构 三 视频缓存池 1 视频缓冲池 VB 2 要点 3 相关的数据结构和API 1 VB CONF S 2 HI MPI VB SetConf
  • 家谱(特殊的层级人物关系)数据结构与自动排版算法的一种实现

    github源代码 家谱海本地私有版 https github com fengchangfight familytreesea 出处 http www fengchang cc post 24 家谱的数据结构并不复杂 逻辑上可以抽象成一种
  • BES2300x笔记(28) -- 左右耳同时按下的骚操作

    哈喽大家好 这是该系列博文的第二十八篇 篇 lt lt 系列博文索引 快速通道 gt gt 一 前言 市面上的TWS耳机 一般中高端耳机都会有触摸按键和入耳检测功能 使用触摸按键更方便外观和防水处理 但同时也限制了UI交互方式 有限的交互方
  • eclipse快速打开和闭合函数方法代码块的快捷方式

    ctrl shift 小键盘 收起和ctrl shift 小键盘 闭合
  • 基于深度学习的变化检测算法实现

    我是研究生期间研究主要研究SAR影像的变化检测 这是一段简单的基于深度学习的变化检测方法 以CNN实现 首先说下基于深度学习的变化检测任务的思路 制作训练样本 gt 训练模型 gt 使用训练的模型遍历图片中每个像元得出结果 1 筛选训练样本
  • spring.ftl

    lt ftl strip whitespace true gt lt spring ftl This file consists of a collection of FreeMarker macros aimed at easing so
  • css中垂直对齐常用的几种方法

    一 行高 line height 法 如果要垂直居中的只有一行或几个文字 那它的制作最为简单 只要让文字的行高和容器的高度相同即可 比如 p height 30px line height 30px width 100px overflow
  • Angularjs理解二

    1 dom加载完毕 找寻ng app 先从上到下找相关的指令 然后分两阶段执行 先找到所有的指令 完成编译 得到一个个链接函数 最后在链接到一个个controller上 还是边编译边链接 先执行 injector invoke rootSc
  • 光耦PC817

    光耦一共4个引脚 两个输入 两个输出 输入接5v和gnd 5v接时加100欧姆电阻 输出不大于35v电压 这时输出端通路 只是通路 不是短路 转载于 https www cnblogs com judes p 5686414 html
  • PCA主成分分析(入门计算+深入解析)(一)

    PCA主成分分析 入门 深入 最大方差理论 几何意义 Principal components analysis 转载请注明 云南省高校数据化运营管理工程研究中心博客http blog csdn net m0 37788308 articl
  • Python解决相对路径问题

    学习Python中 一直被相对路径困扰 只能使用绝对路径 解决方法 加上下面代码 import os sys os chdir sys path 0 这个问题到现在也没有搞清楚 因为在命令行直接敲命令运行py文件可以直接使用相对路径 而我在
  • 浅谈三目运算符(c++)

    目录 什么是三目运算符 三目运算符怎么用 基本用法 进阶用法 注意事项 相关题目 B2035 判断数正负 B2037 奇偶数判断 B2052 简单计算器 什么是三目运算符 三目运算符是分支结构中的一种运算 根据不同的条件 执行不同的操作并返