我 % 2 == 0 ? arr[i] = 0 : arr[i] = 1;三元运算符错误
i % 2 == 0 ? arr[i] = 0 : arr[i] = 1; Ternary operator error
关于三元运算符。我正在使用更简洁的三元运算符在 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;
你可以简单地把它写成:)
arr[i] = i%2;
由于运算符优先级问题,我相信您的代码会像这样解析:(i % 2 == 0 ? arr[i] = 0 : arr[i]) = 1;
。三元运算符产生一个 rvalue
,在 C 中,它不能被赋值。您应该将其更改为 i % 2 == 0 ? (arr[i] = 0) : (arr[i] = 1);
无论如何,整个结构都是多余的,最好用 arr[i] = i % 2;
之类的东西代替
为什么不呢:
for (i=0; i < 10; i+=2) {
arr[i] = 0;
arr[i+1] = 1;
}
关于三元运算符。我正在使用更简洁的三元运算符在 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;
你可以简单地把它写成:)
arr[i] = i%2;
由于运算符优先级问题,我相信您的代码会像这样解析:(i % 2 == 0 ? arr[i] = 0 : arr[i]) = 1;
。三元运算符产生一个 rvalue
,在 C 中,它不能被赋值。您应该将其更改为 i % 2 == 0 ? (arr[i] = 0) : (arr[i] = 1);
无论如何,整个结构都是多余的,最好用 arr[i] = i % 2;
为什么不呢:
for (i=0; i < 10; i+=2) {
arr[i] = 0;
arr[i+1] = 1;
}