如何在三元运算符中使用continue语句?
for (i = 0; i < arr_size - 1; i++)
{
ar[i] == 1 || ar[i] == 2 || ar[i] == 3 ? count++ : continue;
}
我可以这样替换它。
for (i = 0; i < arr_size - 1; i++)
{
ar[i] == 1 || ar[i] == 2 || ar[i] == 3 ? count++ : count;
}
不能以这种方式使用continue
,因为它是一个语句,并且三元运算符的操作数必须是表达式。
与任何运算符一样,它的结果具有一个可以在其他表达式中使用的值。如果允许以您想要的方式使用continue
,那么表达式的值是多少?那样用是没有意义的。
三元运算符不适合您所需要的。它应该重写为if
语句:
if (ar[i] == 1 || ar[i] == 2 || ar[i] == 3) {
count++;
}
三元运算符有一些特殊的规则。
例如,您只能在这三个参数中使用表达式。但continue;
是一个完整的句子。所以它不能与三元运算符一起工作。
如果您必须使用continue的三元运算符,您可以尝试以下操作:
for (i = 0; i < arr_size - 1; i++)
{
bool flag = false;
ar[i] == 1 || ar[i] == 2 || ar[i] == 3 ? count++ : (flag = true);
if(flag) continue;
}
请参阅此C参考并阅读n1570或一些更新的C标准。另请阅读现代C,并研究现有用C编码的自由软件的源代码,如GNU make。
表达式和语句是不同的
代码:
for (i = 0; i < arr_size - 1; i++)
{
if (ar[i] == 1 || ar[i] == 2 || ar[i] == 3)
count++;
else
continue;
}
假设else continue
是循环中的最后一件事,您可以省略它
提示:使用最新的GCC编译器gcc -Wall -Wextra -g
编译C代码。
阅读C编译器(例如GCC(和调试器的文档(例如GDB(。
如果允许,可以使用静态源代码分析工具,如Clang静态分析器、Frama-C、Bismon或DECODER项目。
(对于Frama-C、Bismon和DECODER,请在2021年通过电子邮件联系我basile.starynkevitch@cea.fr。(