递减for循环?

7
我可以在Xcode中递增FOR循环,但由于某种原因,相反的递减操作无法正常工作。
当然,这个递增操作是有效的:
for (int i=0; i<10; ++i) {
    NSLog(@"i =%d", i);
}

但是,这种递减并没有产生任何东西:
for (int i=10; i<0; --i) {
    NSLog(@"i =%d", i);
}

我一定是语法写错了,但我相信这是xcode中Objective C++的正确语法。
6个回答

25

我想你的意思是用 > 代替 <

for (int i = 10; i > 0; --i) {
如果你想让变量i的值与原始代码相同,只不过是倒序排列(即9、8、7、...、1、0),那么你还需要更改边界。
for (int i = 9; i >= 0; --i) {

1
请注意,后者对于像int这样的有符号类型运作良好,但对于像size_t这样的类型会下溢(因此永远不会终止)。相反,请使用for (size_t index = your_size; index--;) - Qqwy

5
我想补充一点,记住 --i 先减少,然后检查,而 i-- 先检查,然后减少。

2

您需要满足条件 i>0 (如果 i 从10开始,那么10<0是错误的,因此它不会执行循环代码)。


1

for (int i = 10; --i >= 0;) {

这是一种简洁的方式,用于表达@Mark Byers答案中的for循环。


1
你正在检查 i < 0。在第一次迭代中,这是错误的,因此循环不会被执行。请将它改为 i > 0

0

将终止条件从i<0更改为i>0


哦,这与我在其他古老编程语言中所习惯的FOR循环逻辑完全不同。我以为条件是在测试i从10倒数到1。这似乎有些违反直觉,但它确实有效。非常感谢。 - Michael Young

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接