?:运算符与之前的运算符不同,他的格式是这样:
表达式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
请按任意键继续. . .
验证成功。
从左边开始验证,不满足则取右边的,满足则继续验证下一个,依次类推。直到全部满足,执行最里面“:”左边的表达式。