我不太确定要搜索什么 - 但我正在寻找一种优雅的方式,如果可能的话,构造一个使用两个布尔值的if语句,可以轻松输出所有四种可能性。 / p>
变量:
bool a = true;
bool b = true;
我不确定在检查消极性方面是否有最好的做法 - 然后继续等等。
非常草率的例子:
if(!a && !b)
{
//Output (-,-)
}
else
{
if(a || b)
{
if(a)
{
//Output (+,-)
}
else
{
//Output (-,+)
}
}
else
{
//Output (+,+)
}
}
对不起所有的海鸥之翼( {} )我是一个格式迷。无论如何 - 感谢任何建议!
答案 0 :(得分:3)
我不完全确定我得到你所要求的......你只是想要if
陈述来涵盖所有四种可能性吗?
如果是这样,这里有一个简单的方法:
if (a && b)
// Output (+, +)
else if (!a && b)
// Output (-, +)
else if (a && !b)
// Output (+, -)
else
// Output (-, -)
如果这不是你想要的,请告诉我,我会删除这篇文章。
答案 1 :(得分:3)
这取决于你如何定义优雅。
所以我会按照自己的定义去做:
考虑到这一点,我只想去:
if( a ) {
if( b ) {
...
} else {
...
}
} else {
if( b ) {
...
} else {
...
}
}
它并不比你的想法那么冗长,但至少它清楚地表达了那里的含义。
话虽如此,我发现像这样的控制结构非常可疑。您可以:
答案 2 :(得分:2)
理想情况下,您根本不会使用if
...
case a, b of
true, true => "+,+"
| false, true => "-,+"
| true, false => "+,-"
| false, false => "-,-"
如果您想违反公司C编码标准并测试C编译器的优化程序,可以用C表示
switch (((!!a) * 2) + (!!b))
{
case 3: \\ "+,+"
break;
case 2: \\ "+,-"
break;
case 1: \\ "-,+"
break;
case 0: \\ "-,-"
break;
}
答案 3 :(得分:0)
以下代码段无法维护。反正
Output(strings[(a ? 2 : 0) + (b ? 1 : 0)])
答案 4 :(得分:0)
我尝试了以下示例,这似乎有效:
result = (name & id) ? "(+,+)" :
(!name & !id) ? "(-,-)" :
(name & !id) ? "(+,-)" : "(-,+)";
然而 - 我不知道是否有任何方法可以输出值而不是设置变量来包含它们(使用三元运算符)。
答案 5 :(得分:0)
我想你想要这个:
char table[2] = {'-','+'};
printf("(name%c,id%c)",table[!!name],table[!!id]);
喝彩!
答案 6 :(得分:0)
静态分析可用于改进@templatetypedef的答案。我个人更喜欢这个,因为它比@biziclop回答更简洁
if (a && b) {
// Output (+, +)
} else if (a) {
// Output (+, -)
} else if (b) {
// Output (+, -)
} else {
// Output (-, -)
}
可以推广到两个以上的变量,例如
if (a && b && c) {
} else if (a && b) {
} else if (a && c) {
} else if (b && c) {
} else if (a) {
} else if (b) {
} else if (c) {
} else {
}