c - 我 % 2 == 0 ? arr [我] = 0 : arr[i] = 1; Ternary operator error

标签 c arrays ternary-operator lvalue

关于三元运算符。我正在使用更简洁的三元运算符在 C 中重写 if-else 语句。 这是代码:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int arr[10];
    int i;

//    for ( i = 0; i < 10; i++ )
//    {
//        if ( i % 2 == 0 )
//        {
//            arr[i] = 0;
//        }
//
//        else arr[i] = 1;
//    }

    for ( i = 0; i < 10; i++ )
    {
         i % 2 == 0 ? arr[i] = 0 : arr[i] = 1;//Line in question
    }

    /* Just to check the result */
    for ( i = 0; i < 10; i++ )
    {
        printf ( "%d ", arr[i] );
    }

    return 0;
}

注释代码确实有效,但令我惊讶的是,当我使用三元运算符编译文件时,我得到了以下内容:

C:\Users...\main.c|21|error: lvalue required as left operand of assignment|

这是一个简单的代码,用于检查数组中的位置是奇数还是偶数。 进行了搜索,我读到的唯一与此代码相关的是 lvalue 是一个变量。如果这是真的,我将引用一个例子,直到今天我还没有得到答案:

printf ( "%d", 23 + 4 );

占位符将被字面值 27 替换。这里不涉及变量,它很难工作。 谢谢。

最佳答案

改变:

i % 2 == 0 ? arr[i] = 0 : arr[i] = 1;

为此:

i % 2 == 0 ? (arr[i] = 0) : (arr[i] = 1);

条件运算符的优先级高于赋值运算符。

正如评论中所建议的,您可以获得相同的结果:

arr[i] = (i % 2 == 0 ? 0 : 1);

或者简单地说:

arr[i] = i % 2;

关于c - 我 % 2 == 0 ? arr [我] = 0 : arr[i] = 1; Ternary operator error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30335008/

相关文章:

c++ - 如果注册表项不存在

javascript - JavaScript 中 new Array() 的未定义值

java - int[]... 数组在 Java 中意味着什么?

reactjs - react : Ternary operation in JSX produces "Unexpected token" error

c# - 三元运算符 VB 与 C# : why resolves Nothing to zero?

c++ - sprintf 中 Windows 与基于 Unix 的系统的舍入差异

c - libmagickwand-dev 在哪里(我全部安装了)以及如何将其包含到 C 程序中

C pread给出不同的结果

java - 我们如何在不使用任何内置函数的情况下在 Java 中找到 String 的长度? (甚至不是 charAt() 或 toCharArray() 或 length())

javascript - 使用 StandardJS 时变量声明后的三元条件被认为是不好的做法