(八十五)?: 运算符

?:运算符与之前的运算符不同,他的格式是这样:

表达式a?值1:值2

意思是:

假如表达式a的值为真,输出值1(即本表达式的值为值1);

假如表达式a的值为假,输出值2(即本表达式的值为值2);

注意,第一个是英文字符问号,第二个是英文字符冒号。

 

如代码:

#include<iostream>

int main()
{
	using namespace std;
	int a;
	for (int i = 0;i < 2;i++)
	{
		cout << "请输入第一次的值:";
		cin >> a;
		cout << "输出:"<<((a < 6) ? 1 : 10) << endl;
	}

	system("Pause");
	return 0;
}

输出:


请输入第一次的值:3
输出:1
请输入第一次的值:111
输出:10
请按任意键继续. . .

?:类似if else:

if(表达式a){值1;}else{值2;}

事实上,也可以像写if这样写代码;


#include<iostream>

int main()
{
	using namespace std;
	int a,i;
	for (i = 0;i < 2;i++)
	{
		cin >> a;
		a < 5 ? cout << a << endl : cout << a + 5 << endl;	//像if else那样写?:
		cout << endl;
	}
	system("Pause");
	return 0;
}

输出:


3
3

10
15

请按任意键继续. . .

?:相对if else的优点:

①可以直接输出值给一个更大的表达式。而if需要额外声明一个变量才可以。

 

②在面对比较短小简单的代码时候,比if else更简单。

 

③每个?可以理解为一个if,特备是在多个?存在的时候。如代码:

#include<iostream>
#include<string>

int main()
{
	using namespace std;
	string a[2] = { "abc","def" };
	char *b = "+";

	for (int i = 0;i < 3;i++)
		cout << ((i < 2) ? !i ? a[i] : b : a[1]);
	system("pause");
	return 0;
}

输出:


abc+def请按任意键继续. . .

逻辑为:

i=0;

①先判断i<2。满足,排除a[1]

②再判断!i。满足,排除b

③执行a[i];结束

i=1;

①先判断i<2。满足,排除a[1]

②再判断!i,不满足,执行b;结束

i=2;

①先判断i<2,不满足,执行a[1];

 

解释:

a?b?A:B:C的逻辑是:a?(b?A:B):C

①先判断a,不满足,则执行C;满足执行(b?A:B);

②判断b,不满足,执行B;满足,执行(A),于是只有A了,执行之;

③依次类推,假如a?b?c?A:B:C:D,a不满足则D,然后b不满足则C;再然后c不满足则B,最后是A。

代码验证之:

#include<iostream>
#include<string>

int main()
{
	using namespace std;
	//a?b?c?A:B:C:D

	//可能1:
	//①a不满足,D;a满足排除D,执行(b?c?A:B:C)
	//②b不满足,执行C;b满足,执行c?A:B
	//③c不满足,执行B;c满足,执行A

	//可能2:
	//①c满足,执行A;a不满足,下一行;
	//②b满足,执行B;b不满足,下一行;
	//③a满足,执行C;a不满足,D;

	//验证方法b不满足,a不满足,c满足。
	//可能1:因为a不满足,执行D;
	//可能2:因为c满足,执行A

	string A, B, C, D;
	int a, b, c;
	A = "A";
	B = "B";
	C = "C";
	D = "D";
	a = 1;
	b = 2;
	c = 3;

	cout << ((a != 1) ? (b != 2) ? (c == 3) ? A : B : C : D )<< endl;	//a不满足,b不满足,c满足

	system("pause");
	return 0;
}

输出:


D
请按任意键继续. . .

验证成功。

从左边开始验证,不满足则取右边的,满足则继续验证下一个,依次类推。直到全部满足,执行最里面“:”左边的表达式。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值