此特定循环填充一个数组,该数组一点一点地代表二进制数。我想做的是使用三元运算符检查用户输入的数字是“ 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++
可以使其完美运行。我的问题是,为什么它在第一种情况下不起作用,为什么 在第二种情况下起作用?
答案 0 :(得分:4)
您的表情分组为
(
binaryNumber[i] == 1 || binaryNumber[i] == 0
? i++
: printf("Binary bits can only be 0 or 1!\n")
), i--;
并以定义的行为进行编译,因为printf
返回int
类型,并且,
是一个排序点。换句话说,i
总是 递减。
请注意,?
和:
之间的位就像在括号中一样被分组,但是:
之后的部分不是这样。换句话说,有些奇怪的是
!(binaryNumber[i] == 1 || binaryNumber[i] == 0)
? printf("Binary bits can only be 0 or 1!\n"), i--
: i++
将表现出您所期望的方式,尽管对我而言,依靠它可能已经太遥远了。