0

下面的代码在我运行它时会产生一个错误,但是如果我在循环之外声明至少一个变量,则代码可以正常工作。为什么我不能在循环本身中声明这两个变量?

错误:

#include<iostream>
#include<conio.h>
using namespace std ;

int main()
{
for(int j=0,int i=0;i<4&&j<2;i++,j++)
{
    cout<<"Hello"<<endl ;
}
getch() ;
return 0 ;
} 

工作正常:

#include<iostream>
#include<conio.h>
using namespace std ;

int main()
{
int i ;
for(int j=0,i=0;i<4&&j<2;i++,j++)
{
    cout<<"Hello"<<endl ;
}
getch() ;
return 0 ;
} 
4

3 回答 3

8

你可以,但是在一个声明中声明两个变量的符号是这样的:

int j=0, i=0;

没有第二个int

(这实际上是你的第二个版本正在做的事情;你可能认为它正在分配已经声明的i,但实际上它是在声明一个新的,其范围是for-loop。)

于 2013-10-06T06:35:20.710 回答
5

因为这就是标准定义语法的方式。这个想法没有什么特别“错误”,但显然决定在初始化部分只能有一个声明。

如果要声明多个变量,请使用逗号进行枚举(但这样只能声明相同类型的变量):

for (int i = 0, j = 10; i < 10; i++, j--)

但是,我不确定您是否应该这样做。在某一点之后,这演变成一个难以理解的混乱。

于 2013-10-06T06:36:57.033 回答
0

请注意,给定的答案“仅”处理生成相同类型的多个变量。

如果出于某种奇怪的原因,您需要执行多种类型,这是有效的(虽然很糟糕):

for(struct {int a; double b} loop = {0, 1.5}; loop.a < loop.b; loop.a++)
{
    // Awful hacks
}
于 2014-08-26T22:13:02.620 回答