c - 在三元运算中设置 2 个值 - C

标签 c if-statement ternary-operator

我在使用 C 中的三元运算符设置两个整数时遇到问题。我似乎找不到答案,因为大多数问题都与多个三元条件有关。

然而,我想检查一个条件并相应地设置 2 个值。

即:

if ( i == 5 ) {
    x = foo;
    y = foo + 1;
} else {
    x = bar;
    y = bar + 1;
}

到目前为止,我尝试了以下方法,但它似乎不起作用。

x, y = ( i == 5 ) ? foo, foo + 1 : bar, bar + 1;

是否可以在检查 1 个条件后在三进制中设置两个值?

谢谢,

最佳答案

这是不可能的。与支持分配给数字列表的 python 或 perl 不同,C 不支持这种语法。

您需要两个独立的三元运算来执行此操作:

x = (i == 5) ? foo : bar;
y = (i == 5) ? foo + 1 : bar + 1;

如果您只希望条件运行一次(例如,这是一个函数调用或其他一些昂贵的操作):

int result = (i == 5);
x = result ? foo : bar;
y = result ? foo + 1 : bar + 1;

编辑:

如果你想使用一些丑陋的东西,这会起作用:

x = (i == 5) ? (y = foo + 1, foo) : (y = bar + 1, bar);

通过使用逗号运算符,运算符的左侧被求值(在这种情况下,对 y 的赋值)并被丢弃,而右侧成为随后被赋值的表达式的值到 x

请注意,“if”部分并非严格需要括号,但“else”部分需要括号。

然而,这是对语言的滥用。最好坚持使用更具可读性的内容。

关于c - 在三元运算中设置 2 个值 - C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40094942/

相关文章:

c - "? :"发生了什么?我不知道返回类型

c - 如何将值传递给整数指针

c - c中的json相似对象

c - 我正在尝试合并两个排序的链表

java - Play框架: scala template, if语句问题

c# - 三元语句中没有隐式 int -> short 转换

c - 在lapack的dgels函数中使用malloc

java - 在 java 中使用数百个 if else 实现业务规则的设计模式

c++ - 如果constexpr失败,为什么会这样使用C++ 17?

asp-classic - 想检查 Recordset 是否有一些值(value)