【发布时间】:2021-12-15 22:06:45
【问题描述】:
for(int i=1;i<=n;){
f++;
if((i++==p) || (i++==p))
break;
}
例子1:n=7,p=3,f=0;所以f 的值应该是1,对吧?但它给出了f=2 作为输出
示例2:n=7,p=4,f=0;它的输出为f=2
例子3:n=7,p=5,f=0;它的输出为f=3
帮助我理解这一点。
【问题讨论】:
-
您可能处于未定义的行为领域,在同一个表达式中的同一个变量上有两个后缀运算符实例。
-
输出对我来说是正确的。在纸上写下你的变量,将手指放在循环中的每个语句上,然后手动运行。每次更新相关变量。请记住,当您使用 postfix-increment (
i++) 时,返回的值是 before 被递增的值。 -
@selbie 这似乎不对。
||的左手操作符必须在右手操作符之前进行评估以启用短路,因此不存在排序歧义。 -
我正试图找出任何人都可以使用它的地方。它似乎没有多大用处,因为 i 在范围内是本地的。如果 i 被用作字符串的索引,那么
if((i++==p) || (i++==p))将在中断结束时给出下一个可用位置(如果它不是本地的)。此外,以这种方式递增会违反i<=n,因此很难弄清楚 i 可以有多大。 -
@placidchat -- 你说得对,代码令人困惑,但在循环体中修改循环索引 (
i) 本身并没有什么坏处。例如,您可以编写一个for循环,而在for中没有增量:for (int i =0; i < n; ) { ++i; }。有时这很方便。在这种情况下,由于增量隐藏在if语句中的方式,它几乎不可读。
标签: c++ loops for-loop increment