我有一个看起来像这样的方法:
bool Perfect(int num) {
int sum = 0;
for (int i = 1; i < num; i++)
{
num%i == 0 ? sum += i : continue;
}
return sum == num ? true : false;
}
我想在这里结合?运营商与继续运营商......
逻辑上如果此行中的语句为false:
num%i == 0 ? sum += i : continue;
我会跳过迭代或什么都不做?
如果我这样做,编译器会报告如下错误:
expected an expression
如果是这样的话:
num%i == 0 ? sum += i
它说:
Expected a ':'
有没有办法继续使用?运算符或只是简单地避免错误的情况???
答案 0 :(得分:3)
bool Perfect(int num) {
int sum = 0;
for (int i = 1; i < num; i++)
{
if(num % i == 0)
sum += i;
}
return sum == num;
}
使用if
声明。由于continue
之后没有其他声明,因此无需sum += i
。
答案 1 :(得分:2)
C ++和C同时具有语句和表达式(注意赋值或函数调用是表达式,表达式是语句)。它们是不同的句法(和语义)事物。
您可以在?:
循环中编码(但这是一种奇怪的样式,因为语句缩减为for
条件表达式):
(num%i == 0) ? (sum += i) : 0;
(当num%i
非零时,评估为0
,没有明显的副作用;最后一次出现0
的BTW可能是1234
或任何常数积分表达式)
某些编程语言(特别是Scheme,read SICP)只有表达式(没有语句)。
三元?:
operator适用于表达式并给出表达式(因此不能用于语句)。
条件语句使用if
关键字。在您的情况下,它更具可读性(因为您仅使用sum += i
作为其副作用)并且if
语句在这里更容易理解。
答案 2 :(得分:2)
您不能以这种方式使用三元运算符。您通常会使用它根据表达式为true或false为变量赋值。例如
int j, i,
j = (i == 2) ? 5: 10;
如果i等于2,那么j的值为5 else如果i不等于2则j给出10的值。