如何在C中的循环中包含最后一个元素?

皮瑟喂食

这是我遇到的一个普遍问题,我还没有找到解决方案,感觉不是很“hack-y”。假设我有一些元素数组xs = {a_1, a_2, ..., a_n},我知道一些元素x在数组中。我希望遍历数组,并对每个元素做一些事情,直到并包括element x这是一个几乎可以做到这一点的版本,只是它省略了最后一个元素。请注意,在此示例中,数组恰好是一个排序的整数列表,但在一般情况下,这可能不一定是真的。

int xs[] = {1,2,3,4,5};
for (int i = 0; xs[i] != 4; i++) {
    foo(xs[i]);
}

到目前为止,我看到的唯一解决方案是:

  1. 只需foo(xs[i]);在 for 循环后添加最后一条语句即可。这首先是丑陋和重复的,尤其是在foo不仅是函数调用而是语句列表的情况下。其次,它需要i在 for 循环范围之外定义。

  2. 手动中断循环,在无限循环中使用 if 语句。这对我来说再次看起来很丑陋,因为我们并没有真正充分利用 for 和 while 结构。这个问题几乎是你使用 for 循环的原型,唯一的区别是我们只是希望它再循环一次。

有谁知道解决这个问题的好方法?

暗黑破坏神

在 C 中,for循环是一个“在正文之前检查”操作,您需要“在正文之后检查”变体,一个do while循环,例如:

int xs[] = {1,2,3,4,5};
{
    int i = 0;
    do {
        foo(xs[i]);
    } while (xs[i++] != 4);
}

您会注意到我将整个块包含在它自己的范围内(最外面的{}大括号)。这只是为了限制 的存在,i使其更符合for循环行为。

就显示此内容的完整程序而言,以下代码:

#include <stdio.h>

void foo(int x) {
    printf("%d\n", x);
}

int main(void) {
    int xs[] = {1,2,3,4,5};
    {
        int i = 0;
        do {
            foo(xs[i]);
        } while (xs[i++] != 4);
    }
    return 0;
}

输出:

1
2
3
4

顺便说一句,像你一样,我没有那么热衷于其他两种解决方案,你见过。

对于第一种方案,因为寿命在这种情况下,不会真正的工作i仅限于for环本身(intfor声明中初始化节,该如此)。

这意味着i在循环后不会有您期望的值。无论是将有没有i(编译时错误),或有i这是隐藏在内部for循环,因此不可能有你所期望的价值,导致隐伏缺陷。

对于第二个,我有时会在正文中中断循环,但通常只在正文的开头,以便控制逻辑在单个区域中仍然可见。如果for情况会很长,我倾向于这样做,但还有其他方法可以做到这一点。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在foreach循环中定义最后一个元素?

如何在for循环中从列表中选择最后一个元素?

如何在最后一个循环中删除“AND”(每个)

如何在foreach循环中检测第一个和最后一个元素?

如何在for循环中从字符串中获取最后一个索引

如何在Laravel中的foreach循环中删除最后一个<hr>标记?

如何在for循环中只显示最后一个值?C#

如何在{{#each}}循环中的元素之间添加分隔符,除了最后一个元素之后?

如何只等待在 C# 中的循环中声明的最后一个线程?

如何在Scala中递归获取地图中包含的每个列表的最后一个元素?

最后一个元素未在循环中删除

如何在R中循环的最后一个元素之后追加到列表?

如何在循环中将类添加到最后一个帖子的最后一个图像中[Wordpress]

如何检查 item 是否是循环中满足特定条件的最后一个元素

如何在一个循环中选择最大元素在 r 中编写双循环?

如何在Wiremock的每个循环中删除最后一个逗号

如何在while循环中的最后一个数字之后删除尾随逗号

Javascript:如何在for循环中删除最后一个逗号

循环中的onclick仅引用循环中的最后一个元素

在getchar()循环中时如何检测C字符串中的最后一个字符

Propel:如何在一个循环中一次从数据库中检索所有元素?

如何避免python循环中的最后一个逗号

如何检测循环中的最后一个ajax调用?

如何从foreach循环中删除最后一个逗号?

如何获得_.forEach()循环中的最后一个迭代

如何删除for循环中的最后一个逗号

在while循环中如何使用最后一个命令?

如何在C ++中打印集合中的最后一个元素

c - 如何在c中打印数组的最后一个元素