Приведенный ниже код генерирует ошибку, когда я запускаю ее, но если я объявляю по крайней мере одну переменную за пределами цикла, код работает нормально. Почему я не могу объявить обе переменные в самом цикле?
Ошибка:
#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 ;
}
Вы можете, но обозначение для объявления двух переменных в одном объявлении выглядит так:
int j=0, i=0;
без второго int
.
(На самом деле это то, что делает ваша вторая версия, вы можете подумать, что она назначает уже объявленный i
, но на самом деле он объявляет новый, область видимости for
-loop.)
Потому что это означает, что стандарт определяет синтаксис. В этом нет ничего "неправильного", но, судя по всему, было решено, что вы можете иметь только одно объявление в части инициализации.
Если вы хотите объявить несколько переменных, используйте запятую для их перечисления (но таким образом вы можете объявлять только переменные того же типа):
for (int i = 0, j = 10; i < 10; i++, j--)
Однако я не уверен, что вы должны это делать. После определенного момента это превращается в неразборчивый беспорядок.
Обратите внимание, что данные ответы "только" обрабатывают несколько переменных одного и того же типа.
Если по какой-то причудливой причине вам нужно будет делать несколько типов, это действительно (хотя и ужасно):
for(struct {int a; double b} loop = {0, 1.5}; loop.a < loop.b; loop.a++)
{
// Awful hacks
}