【问题标题】:Alternative to writing the same code before the loop替代在循环之前编写相同的代码
【发布时间】:2018-07-02 21:02:02
【问题描述】:

我想让 for 循环在开始时执行代码。但是,我的开始状态与结束状态相同。有什么办法可以在循环之前不写代码就可以执行?

for(int i = queue1->front; 
    i%queue1->size != queue1->front; 
    i++) {
    //some code
}

在代码中,我使用了一个循环数组,我想使用循环打印它。

【问题讨论】:

  • 我可以创建另一个迭代器并使其在开头等于0并将其添加到条件中作为|| j == 0 可能
  • 您需要使用do {} while 循环,以便在检查循环条件之前增加i
  • 是的,我将成为数组的索引
  • 这肯定比在 for 之外复制第一个迭代更优雅 ;) (记得用 @[username] ping 用户,否则他们不会知道你在和谁说话)
  • @A.Eser 我同意do {} while 是丑陋的,但这是它要解决的问题类型。另一种选择是无限循环for (;;),您在循环末尾放置if 语句,并在满足条件时放置break

标签: c arrays


【解决方案1】:

除了使用 do-while-loop 之外,您还可以在任何情况下使用标志进入循环:

int first = 1;
for (int i = queue1->front; i%queue1->size != queue1->front || first; i++){
    first = 0;
    //some code
}

如果您愿意,您甚至可以将其直接集成到 for 循环头中:

for (int i = queue1->front, f=1; i%queue1->size != queue1->front || f; i++, f=0) {

【讨论】:

  • 我一直在寻找这种“标志”的解决方案。感谢您的新观点!
  • 我更喜欢将bool 用于标记变量,例如first,而不是使用int
  • @DavidRTribble 很好,我喜欢蝙蝠侠和我的牛排培养基。你的重点在哪里?除此之外,C 中没有布尔原语。
  • @Ctx - 自 1999 年以来我一直在使用 stdbool.h,它对我有用。是的,我知道这不是原始的,但每个人都应该知道bool 的意思。现在是 2018 年。
【解决方案2】:

您可以简单地使用 do while 循环。您希望循环执行任意次数的情况,但至少有一次是这种循环的典型用例。

int i = queue1->front;
do { 
    //some code
    i++
} while(i%queue1->size != queue1->front)

另一个选择是确保 for 循环中的条件第一次为真。有不同的方法可以做到这一点。一种方法是使用标志。

int flag = 1;
for( ... ; ... || flag; ... ) {
    flag = 0;
    ...
}

您可以使用goto。我不会推荐它。

goto label;
int i=queue1->front; // Init will be skipped
                     // using this method
for(...) {
    label:
    ...
}

如果您不想编写两次代码只是为了避免重复代码,您可以将其重构为一个函数。当然,你必须写两次函数名,但它可能仍然是一个改进。

myFunction();
for(...) {
     myFunction();
}

【讨论】:

  • 一开始看起来有点简洁,可能 DVer 还没有回来重新检查。这就是过早提交的风险......但是,我 +1
  • 也许是这样。好吧'我们会看看海报是否回来。
猜你喜欢
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多