【问题标题】:"lvalue required as left operand of assignment " error“需要左值作为赋值的左操作数”错误
【发布时间】:2011-03-04 06:28:01
【问题描述】:

以下代码产生一个“左值需要作为赋值的左操作数”

if( c >= 'A' && c <= 'Z'  || c = " " || c = ",") {

我想我写错了,有什么问题吗?我该如何正确写?

【问题讨论】:

  • 您显示的代码无法生成您所获得的诊断信息,除非c 是扩展为非左值的宏。如果c 被声明为一个普通变量,c = " " 应该产生“不兼容的赋值类型”或类似的东西。我的猜测是,在您的实际代码中,您使用的是f() = " "(即函数的返回值而不是c)。

标签: c


【解决方案1】:

个人比较喜欢极简风格:

((x == 'c' && y == 'b') || (z == ',') || (z == ' '))

(  x == 'c'  &&  y == 'b'   ||   z == ','   ||   z == ' '  )

(  x == 'c'  &&  y == 'b'  ?  z == ','  :  z == ' '  )

反对

( x == 'c' && y == 'b' ? z == ',' : z == ' ')

【讨论】:

  • !!! html 清洗跳过了逻辑运算符周围的空格!!!! --- 这使得所有可见的差异---
【解决方案2】:

相等是=== 是赋值。您想使用==。还有""char*,单引号做一个字符。

此外,为您的条件添加一些括号会使您的代码更易于阅读。像这样

 ((x == 'c' && y == 'b') || (z == ',') || (z == ' '))

【讨论】:

    【解决方案3】:

    你应该对字符使用单引号,对相等使用双等号(否则它会改变 c 的值)

    if( c >= 'A' && c <= 'Z'  || c == ' ' || c == ',') {
    

    此外,您可能会考虑这样的事情来使您的布尔逻辑更清晰:

    if( (c >= 'A' && c <= 'Z')  || c == ' ' || c == ',') {
    

    虽然您的布尔逻辑结构等效地工作(&& 优先于 ||),但这样的事情将来可能会让您感到困惑。

    【讨论】:

    • FWIW,我会使用('A' &lt;= c &amp;&amp; c &lt;= 'Z') 来使那一点逻辑清楚地表明“A”和“Z”是“外部”边界,并且表达式最类似于数学风格的 ' A'
    【解决方案4】:

    = 是赋值运算符,而不是比较运算符。您正在寻找==

    【讨论】:

      猜你喜欢
      • 2011-12-20
      • 2017-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-01
      • 1970-01-01
      相关资源
      最近更新 更多