关于三元运算符。我正在用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:\用户…\main.C 21错误:左值必须作为赋值的左操作数|
这是一个简单的代码,用来检查数组中的位置是奇数还是偶数。
做了一个搜索,我读到的唯一与这段代码相关的东西是左值是一个变量。如果这是真的,我会举一个至今还没有答案的例子:
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;

10-06 07:07
查看更多