C++ ? 运算符,在 for 循环中继续运算符
C++ ? operator with continue operator in for loop
>我有一个看起来像这样的方法:
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 ':'
有没有办法使用继续使用?运算符,或者只是简单地避免错误大小写,???
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
之后没有其他语句。
C++ 和 C 同时具有语句和表达式(请注意,赋值或函数调用是表达式,表达式是语句)。它们是不同的句法(和语义)事物。
您可以在for
循环中编码(但这是一种奇怪的样式,因为语句简化为?:
条件表达式):
(num%i == 0) ? (sum += i) : 0;
(当num%i
不为零时,计算结果为没有明显副作用的0
;顺便说一句,0
的最后一次出现可能是1234
或任何常量积分表达式)
一些编程语言(特别是Scheme,读作SICP)只有表达式(没有语句)。
三元?:
运算符适用于表达式并给出表达式(因此不能用于语句)。
条件语句使用if
关键字。在您的情况下,它的可读性要高得多(因为您仅出于副作用而使用sum += i
),并且if
语句在这里更容易理解。
不能以这种方式使用三元运算符。您通常会使用它来根据表达式的真或假为变量赋值。例如。
int j, i,
j = (i == 2) ? 5: 10;
如果 i 等于 2,则 j的值为 5,否则如果 i 不等于 2,则 j 的值为 10。
相关文章:
- 如何使用新运算符跟踪在循环中创建的 QLabel
- 有没有办法将 for 循环结果返回到像三元运算符这样的函数中?
- C++在最后一个循环中排除了部分循环运算符
- 如何使用while循环找到GCD?模数运算符是如何工作的
- 在 while 循环中使用字符串(OR 运算符)
- Istream 运算符重载'>>'导致无限循环
- 声明具有双倍大于运算符的 for 循环
- C++ - 循环unordered_map - 执行哈希运算符()
- 基于范围的循环使用另一个运算符
- C++ 中 for 循环中的比较运算符
- 如何在 Qt 文件流中使用 >> 运算符 while 循环
- 文件处理 - 错误:与 while 循环 (C++) 中的"运算符>>"不匹配(代码::块)
- <= 和 == 运算符无法正常工作以结束循环
- C++ ? 运算符,在 for 循环中继续运算符
- 在OpenCV中使用Matlab的冒号运算符C++没有循环
- 字符串流<<运算符在循环中消耗大量内存
- 双向循环列表中的赋值运算符以错误的顺序添加元素
- C++ 嵌套条件运算符循环
- 检查错误时重载>>运算符中的无限循环
- 如何从重写的运算符循环访问矢量数据成员<<