C ++?运算符与continue运算符for循环

时间:2017-09-02 15:10:02

标签: c++ visual-studio continue

我有一个看起来像这样的方法:

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 ':'

有没有办法继续使用?运算符或只是简单地避免错误的情况???

3 个答案:

答案 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的值。