为什么增量在这种情况下不起作用?
Why does the increment not work in this case?
这个特定的循环逐位填充一个代表二进制数的数组。我要做的是使用三元运算符检查用户输入的数字是“0”还是“1”。
while (i < 8)
{
printf("Bit %d: ", i);
scanf("%d", &binaryNumber[i]);
((binaryNumber[i] == 1) || (binaryNumber[i] == 0)) ? i++ : printf("Binary bits can only be 0 or 1!\n"), i--;
}
此代码无法递增 i;所以它无限循环并且printf("Bit %d: ", i)
总是导致Bit 0:
隐藏在:
角落的小i--
是为了重新访问之前的元素,并用正确的值覆盖它。
然而,在三元下添加i++
使其完美运行。我的问题是,为什么它在第一种情况下不起作用,为什么 它在第二种情况下起作用?
您的表达被归类为
(
binaryNumber[i] == 1 || binaryNumber[i] == 0
? i++
: printf("Binary bits can only be 0 or 1!\n")
), i--;
并使用定义的行为进行编译,因为 printf
returns 一个 int
类型并且 ,
是一个排序点。换句话说,i
总是 递减。
请注意,?
和 :
之间的位被分组为好像在括号中一样,但 :
之后的部分并非如此。换句话说,有些奇怪的是,表达式
!(binaryNumber[i] == 1 || binaryNumber[i] == 0)
? printf("Binary bits can only be 0 or 1!\n"), i--
: i++
会 以您期望的方式行事,尽管依赖它可能有点过头了,即使对我来说也是如此。
这个特定的循环逐位填充一个代表二进制数的数组。我要做的是使用三元运算符检查用户输入的数字是“0”还是“1”。
while (i < 8)
{
printf("Bit %d: ", i);
scanf("%d", &binaryNumber[i]);
((binaryNumber[i] == 1) || (binaryNumber[i] == 0)) ? i++ : printf("Binary bits can only be 0 or 1!\n"), i--;
}
此代码无法递增 i;所以它无限循环并且printf("Bit %d: ", i)
总是导致Bit 0:
隐藏在:
角落的小i--
是为了重新访问之前的元素,并用正确的值覆盖它。
然而,在三元下添加i++
使其完美运行。我的问题是,为什么它在第一种情况下不起作用,为什么 它在第二种情况下起作用?
您的表达被归类为
(
binaryNumber[i] == 1 || binaryNumber[i] == 0
? i++
: printf("Binary bits can only be 0 or 1!\n")
), i--;
并使用定义的行为进行编译,因为 printf
returns 一个 int
类型并且 ,
是一个排序点。换句话说,i
总是 递减。
请注意,?
和 :
之间的位被分组为好像在括号中一样,但 :
之后的部分并非如此。换句话说,有些奇怪的是,表达式
!(binaryNumber[i] == 1 || binaryNumber[i] == 0)
? printf("Binary bits can only be 0 or 1!\n"), i--
: i++
会 以您期望的方式行事,尽管依赖它可能有点过头了,即使对我来说也是如此。