我是C的新手,编译简单代码时遇到以下问题:
#include <stdio.h>
int main()
{
int i, a, b;
i = 3;
a = b = 0;
printf("Before: ");
printf("%d %d\n", a, b);
i == 3 ? a = 4 : a = 10; /* Line 9 */
printf("After: ");
printf("%d %d\n", a, b);
return 0;
}
给我错误:
#gcc some.c
In function ‘main’:
some.c:9: error: lvalue required as left operand of assignment
我无法理解。我做错了什么?
答案 0 :(得分:7)
此运算符
i==3 ? a=4 : a = 10;
相当于
( i==3 ? a=4 : a ) = 10;
改为使用
i==3 ? a=4 : ( a = 10 );
答案 1 :(得分:2)
a = (i == 3 ? 4 : 10);
试试这个! : - )
答案 2 :(得分:2)
您需要在三元运算符外部进行分配,而不是在其内部,因为三元运算符比赋值更紧密。所以你应该写
(i == 3 ? a = 4 : a ) = 10;
你写的内容等于
myfunc() = 16;
在此代码中,正在分配rvalue。这与写
的错误相同if (i == 3)
a = 4;
else
a = 10;
化妆品注意:在这种情况下,最好使用if else语句而不是条件运算符,因为这里更清楚。
import io, sys
import pyparsing as pp
def diag(msg, t):
print("%s: %s" % (msg , str(t)) )
def pa_logic_oper(t): diag('logic_oper', t)
def pa_operand(t): diag('operand', t)
def pa_ident(t): diag('ident', t)
def pa_logic_cmd(t): diag('>>>>>> logic_cmd', t)
def pa_cmd_line(t): diag('cmd_line', t)
def make_grammar():
semi = pp.Literal(';')
ident = pp.Word(pp.alphas, pp.alphanums).setParseAction(pa_ident)
operand = (ident).setParseAction(pa_operand)
op_and = pp.Keyword('A')
op_or = pp.Keyword('O')
logic_oper = (( op_and | op_or) + pp.Optional(operand))
logic_oper.setParseAction(pa_logic_oper)
logic_cmd = logic_oper + pp.Suppress(semi)
logic_cmd.setParseAction(pa_logic_cmd)
cmd_line = (logic_cmd)
cmd_line.setParseAction(pa_cmd_line)
grammar = pp.OneOrMore(cmd_line) + pp.StringEnd()
return grammar
if __name__ == "__main__":
inp_str = '''
A param1;
O param2;
A ;
'''
grammar = make_grammar()
print( "pp-version:" + pp.__version__)
parse_res = grammar.parseString( inp_str )
'''USAGE/Output: python test_4.py
pp-version:2.0.3
operand: ['param1']
logic_oper: ['A', 'param1']
cmd_line: ['A', 'param1']
operand: ['param2']
logic_oper: ['O', 'param2']
cmd_line: ['O', 'param2']
logic_oper: ['A']
cmd_line: ['A']
'''
答案 3 :(得分:2)
?:是三元运营商
三元运算符的优先级高于&#39; =&#39;运营商。
所以代码的第9行就像这样工作..
(i == 3 ? a = 4 : a) = 10;
你必须使用括号或修改你的句子 你可以用以下任一行替换你的第9行..
i == 3 ? a = 4 : (a = 10);
a = i == 3 ? 4 : 10;
答案 4 :(得分:1)
试试这个
if (i==3) a = 4; else a = 10;
答案 5 :(得分:0)
三元运算符不能像这样工作。您应该使用括号来为相等运算符赋予更高的优先级。检查优先级优先级。默认情况下,相等运算符的优先级最低。