2013-03-03 47 views
2

我的代码是:左值所需错误使用C

#include<stdio.h> 
int main() { 
    int a=10, b; 
    a >= 5 ? b=100 : b=200; 
    printf("%d %d", a, b); 
    return 0; 
} 

在这里,在有条件的运营商的线路来一个“左值要求”。

你能解释一下为什么吗?

顺便说一句,同一个程序在C++中是完美的。

+3

尝试添加圆括号。 '='具有相当低的优先级。 – 2013-03-03 19:54:17

+0

是的。它正在用圆括号解决......但较老的仍在C++中工作。我只想知道为什么C中存在错误的原因? – 2013-03-03 19:58:10

+0

因为c不是C++吗? – 2013-03-03 19:59:57

回答

7

编写任务的惯用方法是:

b = (a >= 5) ? 100 : 200; 

如果你坚持保留它自己的方式,加括号:

(a >= 5) ? (b=100) : (b=200); 

详情为什么这部作品在C++而不是在C,请参阅Conditional operator differences between C and C++(谢谢@Grijesh Chauhan!)

+0

是的。它正在用圆括号解决......但较老的仍在C++中工作。那么为什么C中有错误呢? – 2013-03-03 19:57:25

+1

@HimanshuAggarwal [**和C++ **之间的条件运算符区别](http://stackoverflow.com/questions/1082655/conditional-operator-differences-between-c-and-c) – 2013-03-03 20:03:35

+1

@GrijeshChauhan:真棒链接,谢谢! – NPE 2013-03-03 20:04:36

1

圆括号在C中具有更高的优先级。由于优先级问题,您会收到警告。 试试这个..

(a >= 5) ? (b = 100) : (b = 200); 
相关问题