在C ++中,for
循环通常采用以下形式的三个语句:
for (init; condition; step)
{
Loop statements
}
我可以在init
的位置放置两个或多个语句吗?我们想说我想定义两个起始变量a
和b
。为此,我会使用int a = 1; int b = 5;
。但是,由于语句之间存在;
,因此C ++会将int b = 5
解释为条件语句。有没有办法将整个陈述聚集到init
,也许是通过使用括号?是否可以为step
做类似的事情?
注意:我知道在调用for
之前我可以初始化变量。但是,我觉得将循环相关语句放在循环的定义中会更合乎逻辑。
答案 0 :(得分:4)
尝试for (int a =1, b=5; condition; a++,b++) {}
并非一切皆有可能,但通过调用内部函数可以实现一些非常棒的事情。
void bar() { /* some of the code you want */ }
int main(int argc, char **argv) {
int i = 0;
for(bar();i < 10; i++) {
// your stuff
}
}
如果你考虑使用C ++ 11,你可以在初始化变量的地方定义和调用一个未命名的函数,如下所示:
int a = 0, b = 1;
for ([&a, &b]{ a = b++; b = foo(a); }(); b < 10; a++) {}
虽然我没有看到这样做有什么好处。
答案 1 :(得分:3)
不,你只能有一个初始化声明。但是,通常可以使用逗号运算符来实现所需的结果:
for(int foo = 7, bar = 42; ...; ...) {
...
}
甚至
int foo;
double bar;
for(foo = 7, bar = 42; ...; ...) {
...
}
不可能的是在初始化语句中声明两个不同类型的变量:
//Illegal code!
for(int foo = 7, double bar = 42; ...; ...) {
...
}
答案 2 :(得分:1)
你可以根据需要拥有两个以上的INITIALIZING语句,
但用逗号,
:
for(a=1, b=25, c='C', d=25.0; b>a; a++){
}
但是你不能有多个声明语句,声明的变量必须在第一个语句中:
for(int a=1, b=25, c='C', d=25.0; b>a; a++){}
不是:
for(a=1, int b=25, c='C', d=25.0; b>a; a++){} // wrong !
,,,
您也可以有多种条件或说明, 这是一个例子,后两个测试没有效果,但它只是用于演示:
int i;
for(char a='A', i=0; i<26 || a+i<='Z' && a+i>='A' ;i++ , printf("-") ){
printf("%c", a+i);
}
这将打印:A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z -
,,,
祝你好运,答案 3 :(得分:0)
用逗号分隔。
for(grunt, snarl; foo; goo) {
}
答案 4 :(得分:0)
for(<initialization> ; <condition> ; <increment/decrement variables>){}
变量的初始化和递增/递减可以用逗号分隔。 但条件是单一的,即。我们不能用逗号分隔多个条件。
e,g. for(i=1,j=2,k=3,l=4;j<6;k++,j--,++i,l++){}.
答案 5 :(得分:0)
如果声明了多个类型,则不能有更多的初始化语句。 你可以模仿以下黑客攻击:
for (struct { int a; char b; } i = {1, 'x'}; i.a < 15; ++i.a, ++i.b)
{
// ...
}
这样,您使用未命名的结构来聚合各种类型的多个变量,是的,这是valid C++。