【问题标题】:Double scripted array as an lvalue双脚本数组作为左值
【发布时间】:2013-10-04 20:04:23
【问题描述】:

我想知道,我将如何用代码表达它?

rand() % 2 == 0 ? map[x][y] = 'm' : map[x][y] = 'M';

当我在 g++ 中编译该行时,它不会给出错误。然而 gcc 告诉我我需要一个左值赋值语句。我想也许我应该给他们一个整数

int i = rand() % 2 ? .......

但这也给了我一个错误。有人可以帮忙吗?谢谢

【问题讨论】:

  • 你需要在那个表达式的某个地方加上一些括号。

标签: c++ arrays variable-assignment ternary-operator lvalue


【解决方案1】:

(见here) 从该帖子中接受的答案中,您可以在 C 中看到它将评估为:

((rand() % 2 == 0) ? map[x][y] = 'm' : map[x][y]) = 'M';

并且左边的语句不是正确的 L 值。 您可以将其重写为:

map[x][y] = rand() % 2 == 0 ? 'm' : 'M';
rand() % 2 == 0 ? (map[x][y] = 'm') : (map[x][y] = 'M'); // This should work in C, but I do not have gcc handy to verify

【讨论】:

    【解决方案2】:

    您需要一个左值才能按照您的方式使用表达式。它用于分配,例如:

    bool isFull= (candiesEaten>10) ? true : false;
    

    你写的是:

     if(rand() % 2 == 0){
         =map[x][y] = 'm';
     }else{
         =map[x][y] = 'M';
     }
    

    我希望你明白这一点。更一般的格式是:

     lvalue= (statement)? val1 : val2;
    

    实际上是:

    if(statement){
        lvalue= val1;
    }
    else{
        lvalue= val2;
    }
    

    【讨论】:

      猜你喜欢
      • 2013-01-27
      • 1970-01-01
      • 2011-09-03
      • 2011-03-12
      • 2018-10-19
      相关资源
      最近更新 更多