3

这是一个 C/C++ for 循环:

int i;
for (i = myVar; i != someCondition(); i++)
  doSomething();
// i is now myVar plus the number of iterations until someCondition

我最近不得不使用这样的循环。我需要保留 的值,i因为我想知道i的返回值何时someCondition()变为真。并且 is 的起始值i没有myVar进一步存在的理由。所以想做的是:

for (myVar; myVar != someCondition(); myVar++)
  doSomething();
// myVar is now myVar + the number of iterations.

这对我来说更有意义。我不明白为什么我必须使用一个全新的变量,myVar而这正是我所需要的。但这不是有效的代码。有没有办法为这种情况创建一个全新的变量?

4

3 回答 3

8

你需要的是,

for( ; myVar != someCondition(); myVar++)
       doSomething();

但是您关于以下循环不正确的陈述是错误的,

for (myVar; myVar != someCondition(); myVar++)
  doSomething();

上面的代码在 C 中也可以正常工作。

于 2013-06-01T04:36:22.820 回答
2

我想这就是你所追求的:

for ( ; myVar != someCondition(); myVar++)
    doSomething();
于 2013-06-01T04:30:16.090 回答
0

我觉得while循环更接近你的意图。while someCondition()确实,您正在做某事true,而增加myVar是副作用。

while(myvar != someCondition()) {
 doSomething();
 myVar++;
}

需要明确的是:这些陈述是等价的。我只是在提倡我认为更惯用的代码。

你甚至可以使用do/while循环,但它对我来说有点不习惯。您将在下面找到三个示例;他们都做同样的事情,但感觉不同。任你选!

#include<iostream>

int someCondition() {
  return 10;
}

void doSomething(int myVar) {
  std::cout<<"... I'm doing something with myVar = "<<myVar<<std::endl;
}

int using_for() {
  int myVar = 7;
  for( ; myVar!=someCondition(); myVar++) {
    doSomething(myVar);
  }
  return myVar;
}

int using_while() {
  int myVar = 7;
  while(myVar != someCondition()) {
    doSomething(myVar);
    myVar++;
  }
  return myVar;
}

int using_do() {
  int myVar = 7;
  do {
    doSomething(myVar);
  } while(++myVar != someCondition());
  return myVar;

}

int main() {
  std::cout<<"using for: "<<using_for()<<std::endl;
  std::cout<<"using while: "<<using_while()<<std::endl;
  std::cout<<"using do/while: "<<using_do()<<std::endl;

}

输出:

... I'm doing something with myVar = 7
... I'm doing something with myVar = 8
... I'm doing something with myVar = 9
using for: 10
... I'm doing something with myVar = 7
... I'm doing something with myVar = 8
... I'm doing something with myVar = 9
using while: 10
... I'm doing something with myVar = 7
... I'm doing something with myVar = 8
... I'm doing something with myVar = 9
using do/while: 10
于 2013-06-01T05:47:34.800 回答