C ++ - 返回循环开始而不检查条件

时间:2015-06-18 00:38:07

标签: c++ perl loops redo

在perl上编程,我们可以使用一个名为'redo'的智能函数 - 我们可以回到循环的开始,而不用查看条件。例如,当我们创建一个表格时,我们必须设置一个预期的值/字符(例如“a-b-c”,没有别的)。 我想问一下这样的C ++函数是否存在。我很感激你的帮助。

4 个答案:

答案 0 :(得分:5)

回到循环的开头没有重做关键字,但没有理由不能用goto来做。 (哦,我觉得很脏,推荐goto ...)

int tries = 0;
for(int i=0; i<10; ++i) {
  loop_start:
  bool ok = ((i+tries)%3==0);
  if(ok) {
     ++tries;
     goto loop_start;
  }
}

答案 1 :(得分:3)

我认为更合理的解决方案是

S_ISDIR(m)

答案 2 :(得分:1)

如果您想不惜任何代价避免goto

int tries = 0;
for (int i=0; i<10; ++i) {do{

  bool redo = ((i+tries)%3 == 0);

  if (redo) { ++tries; }
  else      { break; }

} while(1); }

答案 3 :(得分:1)

为什么不能使用简单的while循环?

auto is_okay = [](char x) { return x=='a' || x=='b'; };
container C;
for(std::size_t i=0; i!=C.size(); ++i) {
  char x;
  while(!is_okay(x=obtain_new_character()));  // get new x until it's okay
  C[i]=x;
}

或等效地,do while循环

container C;
for(std::size_t i=0; i!=C.size(); ++i) {
  char x;
  do {
    x=obtain_new_character();
  } while(x!='a' && x!='b');
  C[i]=x;
}

甚至是for循环

container C;
for(std::size_t i=0; i!=C.size(); ++i) {
  char x=0;
  for(; x!='a' && a!='b'; x=obtain_new_character());
  C[i]=x;
}