Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 编译时错误为';所需左值';但不知道为什么_C - Fatal编程技术网

C 编译时错误为';所需左值';但不知道为什么

C 编译时错误为';所需左值';但不知道为什么,c,C,此代码抛出左值必需的编译时错误 #include <stdio.h> void main() { int k = 8; int m = 7; k < m ? k++ : m = k; printf("%d", k); } #包括 void main() { int k=8; int m=7; k

此代码抛出左值必需的编译时错误

#include <stdio.h>

void main()
{
    int k = 8;
    int m = 7;
    k < m ? k++ : m = k;
    printf("%d", k);
}
#包括
void main()
{
int k=8;
int m=7;
k
问题在于:

k < m ? k++ : m = k;
k
对于构造,您希望指定一个值,但不希望。我猜你想要这样的东西:

   k =  (k < m) ? k+1 : m;
k=(k
现在,您将根据条件
k
分配一个值

如果(kk=k+1
否则->k=m


三元运算符的优先级高于赋值,这就是为什么代码等于
(k。您的编译器说括号中的值是不可赋值的

您要做的是:

#include <stdio.h>

void main()
{
    int k = 8;
    int m = 7;
    k < m ? k++ : (m = k);
    printf("%d", k);
}
#包括
void main()
{
int k=8;
int m=7;
k
clang
表示
错误:表达式对于三元运算符中的
m=k
是不可赋值的。您想用
k?三元运算符不是一个
if
替换。是不是
k=k++
UB?我不确定???更好的k+1?是的,
k+1
可以。好的,谢谢。我编辑答案