2017-09-02 149 views
-1

我有一个看起来像这样的方法:C++?运营商,运营商继续在for循环

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; 
} 

我想在这里结合?运营商,运营商继续...

所以逻辑上,如果这里的说法是错误的在这条线:

num%i == 0 ? sum += i : continue; 

我只跳过迭代或者什么也不做?

如果我不喜欢这样的编译器会报告错误,如:

expected an expression 

而如果是这样的:

num%i == 0 ? sum += i 

它说:

Expected a ':' 

有什么继续使用的方式?运营商或只是简单地避免假情况?

+9

不要在这种情况下强制使用三元组;它没有任何意义。只需使用if/else。另外,'return sum == num? true:false;'应该写成'return sum == num'; – Carcigenicate

+0

@Carcigenicate我只是探索C++的可能性,这就是为什么我很好奇,如果有一种解决方案,使用三元运算符与这些种情况:) – User987

+4

Ternarys是用来有条件地返回一个值。 “继续”不会评估任何有用的东西。实验是好的,但是认识正确工作的正确工具也是如此。 – Carcigenicate

回答

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声明。由于您在sum += i之后没有其他声明,因此不需要continue

+0

只需使用'return sum == num;' –

2

C++和C兼得语句表达式(注意分配或函数调用是一个表达式,并且表达式语句)。它们是不同的句法(和语义)的东西。

你可以有编码(但是这是怪异的风格,换算为一个?:条件表达式声明)您for循环内:

(num%i == 0) ? (sum += i) : 0; 

(当num%i不为零,计算结果为0这没有明显的副作用; BTW最后出现0可能是1234或任何常数整数表达式)

某些编程语言(特别是Scheme ,阅读SICP)只有表达式(和没有语句)。

三元组?: operator适用于表达式并给出一个表达式(所以不能用于语句)。

条件语句使用if关键字。在你的情况下,它更具可读性(因为你仅仅为了副作用而使用sum += i),并且这里的if声明更容易理解。

2

您不能以这种方式使用三元运算符。您通常会使用它来根据表达式为true或false将值分配给变量。例如。

int j, i, 

j = (i == 2) ? 5: 10; 

如果i等于2则j给出的5否则该值,如果i不等于2,则j的给定的10的值。