gpt4 book ai didi

C 中的一元条件运算符

转载 作者:太空宇宙 更新时间:2023-11-04 00:37:33 24 4
gpt4 key购买 nike

任何人都可以向我解释或告诉我如何解决我遇到的条件运算符的编码问题

它似乎总是跳过条件运算符并只打印出第二个选项,即使我将服务器更改为 0 或 1

它总是打印出第二个选项 SetB 然后是 SetA

为什么这不起作用?这是某种语义错误吗?还是逻辑错误?

#include <stdio.h>
#include <limits.h>

int main(int argc, char *argv[]){

int ch = -191;
int x = UINT_MAX;
int setA[5]={-1,-1,-1,-1,-1};
int setB[5]={-2,-2,-2,-2,-2};
int server = 1;
int i=2;

printf("%d %d\n",server==1?setA[i],setB[i]:setB[i],setA[i]);
printf("%d %d\n",server==0?setA[i],setB[i]:setB[i],setA[i]);


// printf("%u\n%u\n",ch,x);

}

最佳答案

三元运算符的语法是:条件 ? 表达式 : 表达式

在您的代码中,第一个表达式是 setA[i], setB[i],第二个表达式是 setB[i]。由于语言语法的工作方式,最后的逗号是参数分隔符(不是第二个表达式的一部分),因此您的代码等同于:

int a = (server == 1) ? setB[i] : setB[i];
printf("%d %d\n", a, setA[i]);

这当然是一样的:

printf("%d %d\n", setB[i], setA[i]);

因此无论条件如何,您总是会得到相同的结果。


如果您要在一段代码中有许多相似的行,一个可能的解决方案是根据当前服务器设置一些别名:

// do this once:
int *set0, *set1;
if ( server == 1 )
set0 = setA, set1 = setB;
else
set0 = setB, set1 = setA;

// then use it like this
printf("%d %d\n", set0[i], set1[i]);

关于C 中的一元条件运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25598884/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com