Почему мы не можем объявить две переменные в цикле for?

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 ;
} 
Теги:
for-loop
loops

3 ответа

8
Лучший ответ

Вы можете, но обозначение для объявления двух переменных в одном объявлении выглядит так:

int j=0, i=0;

без второго int.

(На самом деле это то, что делает ваша вторая версия, вы можете подумать, что она назначает уже объявленный i, но на самом деле он объявляет новый, область видимости for -loop.)

  • 0
    понял! Благодаря @ ruakh
5

Потому что это означает, что стандарт определяет синтаксис. В этом нет ничего "неправильного", но, судя по всему, было решено, что вы можете иметь только одно объявление в части инициализации.

Если вы хотите объявить несколько переменных, используйте запятую для их перечисления (но таким образом вы можете объявлять только переменные того же типа):

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

Однако я не уверен, что вы должны это делать. После определенного момента это превращается в неразборчивый беспорядок.

0

Обратите внимание, что данные ответы "только" обрабатывают несколько переменных одного и того же типа.

Если по какой-то причудливой причине вам нужно будет делать несколько типов, это действительно (хотя и ужасно):

for(struct {int a; double b} loop = {0, 1.5}; loop.a < loop.b; loop.a++)
{
    // Awful hacks
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню