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