Форум программистов, компьютерный форум CyberForum.ru

Как правильно объявить два счётчика в цикле for? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 63, средняя оценка - 4.68
vsp
0 / 0 / 0
Регистрация: 01.02.2012
Сообщений: 5
01.02.2012, 21:26     Как правильно объявить два счётчика в цикле for? #1
Добрый день.

Подскажите, пожалуйста. У меня почему-то не работает следующая конструкци цикла:

C++
1
2
3
4
for(int i=0 , int j=0 ; i<10 , j<10 ; i++ , j++)
{
...
}
Хотя ранее, я помню использовал такую конструкцию и она работала нормально. Ругается именно на второй 'int', что очень странно, ведь оба 'int' разделены оператором последовательного выполнения 'запятая', а потому они не ведут себя как при обычном объявлении переменных с инициализацией (например, "...int i=10, int j=16, double d=7.35;" - в данном случае будет ошибка. Но ведь заголовок цикла это совсем другое дело).

Ошибки вцелов выдает такие:

C++
1
2
3
4
5
1>c:\users\user\documents\visual studio 2008\projects\testproject\testproject\testproject.cpp(10) : error C2062: type 'int' unexpected
1>c:\users\user\documents\visual studio 2008\projects\testproject\testproject\testproject.cpp(10) : error C2065: 'j' : undeclared identifier
1>c:\users\user\documents\visual studio 2008\projects\testproject\testproject\testproject.cpp(10) : error C2065: 'j' : undeclared identifier
1>c:\users\user\documents\visual studio 2008\projects\testproject\testproject\testproject.cpp(10) : error C2143: syntax error : missing ';' before ')'
1>c:\users\user\documents\visual studio 2008\projects\testproject\testproject\testproject.cpp(10) : error C2143: syntax error : missing ';' before ')'
Может это связано с настройками (или багом) моей студии (я использую Visual Studio 2008 SP1)? Или я что-то не понял?

Нигде в литературе я не находил опровержение тому, что нельзя в заголовке цикла использовать объявления нескольких локальных управляющих переменных.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.02.2012, 21:26     Как правильно объявить два счётчика в цикле for?
Посмотрите здесь:

Как правильно объявить массив байтов? C++
C++ Как правильно объявить vector в классе?
Как правильно объявить fopen C++
C++ Как правильно объявить массив объектов
Как правильно объявить вектор? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,307
01.02.2012, 21:34     Как правильно объявить два счётчика в цикле for? #2
Мой телепатический угадыватель подсказывает мне, что, вероятно, ты хотел этого:
C++
1
for(int i=0, j=0 ; i<10 && j<10 ; i++, j++) { ... }
vsp
0 / 0 / 0
Регистрация: 01.02.2012
Сообщений: 5
01.02.2012, 21:50  [ТС]     Как правильно объявить два счётчика в цикле for? #3
Да нет.
Суть вопроса именно в том, почему не проходит такая запись:
C++
1
for(int i=0 , int j=0 ; i<10 , j<10 ; i++ , j++)
Ведь в примере я использовал два типа "int", а вдруг нужно будет так:

C++
1
for(int i=0 , double j=0.1 ; i<10 , j<1 ; i++ )
Вопрос касается исключительно такой записи, а не её вариаций.
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6159 / 2888 / 282
Регистрация: 04.12.2011
Сообщений: 7,686
Записей в блоге: 3
01.02.2012, 22:00     Как правильно объявить два счётчика в цикле for? #4
Опоздал.
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
01.02.2012, 22:10     Как правильно объявить два счётчика в цикле for? #5
Цитата Сообщение от vsp Посмотреть сообщение
Суть вопроса именно в том, почему не проходит такая запись:
C++
1
2
for(int i = 0, j = 5; i < j; ++i)
    ;
Про запятую в условии сказали уже. А вариант с int + double вообще не покатит.
Kimel
15 / 15 / 0
Регистрация: 01.02.2012
Сообщений: 182
01.02.2012, 23:47     Как правильно объявить два счётчика в цикле for? #6
vsp,
По законам с++ , в циклах for возможно только одно условие, то есть for(int i=0 , int j=0 ; j<10 ; i++ , j++) или for(int i=0 , int j=0 ; i<10 ; i++ , j++)
gru74ik
Модератор
 Аватар для gru74ik
3069 / 1314 / 164
Регистрация: 20.02.2013
Сообщений: 3,749
Записей в блоге: 15
08.02.2016, 08:33     Как правильно объявить два счётчика в цикле for? #7
Цитата Сообщение от Kimel Посмотреть сообщение
По законам с++ , в циклах for возможно только одно условие, то есть for(int i=0 , int j=0 ; j<10 ; i++ , j++) или for(int i=0 , int j=0 ; i<10 ; i++ , j++)
Ошибка будет.
Байт
 Аватар для Байт
13941 / 8772 / 1220
Регистрация: 24.12.2010
Сообщений: 15,882
08.02.2016, 11:58     Как правильно объявить два счётчика в цикле for? #8
vsp, Слово int начинает оператор объявления переменных. И все что встречается от него до точки с запятой компилятор воспринимает как имена переменных. Вот с этой точки зрения (точка зрения компилятора) давайте проанализируем фразу
C++
1
int i, int j;
int i, - пока все нормально.
int i, int - имя переменной совпадает с зарезервированным словом int - непорядок, о чем вам и сообщается.
Один из возможных способов записи for(int i=j=0; ...
Ну а for(int i=0, double d=0; ... кажется, записать никак не получится.

Добавлено через 2 минуты
ЗЫ. Мысль вашу лично я (и, надеюсь, все остальные участники) прекрасно понимаю. Но как ее объяснить компилятору? И это меня наполняет гордостью за человечество...
gru74ik
Модератор
 Аватар для gru74ik
3069 / 1314 / 164
Регистрация: 20.02.2013
Сообщений: 3,749
Записей в блоге: 15
08.02.2016, 14:20     Как правильно объявить два счётчика в цикле for? #9
Цитата Сообщение от Байт Посмотреть сообщение
Но как ее объяснить компилятору?
Легко:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
 
struct TwoHeadedCounter
{
    TwoHeadedCounter(int i, double j)
    {
        m_i = i;
        m_j = j;
    }
 
    int m_i;
    double m_j;
 
};
 
int main()
{
    const int LIMIT = 10;
    for (TwoHeadedCounter k(0, 1.2); k.m_i < LIMIT; ++k.m_i, k.m_j += 0.2)
        std::cout << k.m_i << "\t" << k.m_j << "\n";
 
    return 0;
}
Байт
 Аватар для Байт
13941 / 8772 / 1220
Регистрация: 24.12.2010
Сообщений: 15,882
08.02.2016, 14:51     Как правильно объявить два счётчика в цикле for? #10

Не по теме:

Цитата Сообщение от gru74ik Посмотреть сообщение
Легко:
Гордость моя за человечество только выросла!

А и правда! Хотите работать конгломератами? - Явно формулируйте свои намерения!

Добавлено через 26 минут
gru74ik, Однако, вот такая конструкция
C
1
2
int i; double j;
for(i=0, j=1.2; ...
И обозримее, и короче, и не вводит новых сущностей. Ведь в чем, имхо, смысл конструкций типа for(int i=... ? Вне цикла про i можно напрочь забыть. Что несколько экономит интеллектуальные усилия. А запятая между операторами хоть и прибавляет выразительности, но в данном случае требует очень аккуратного применения. А неискушенному человеческому взгляду for(int i=0, double j=1.2;... кажется вполне логичным. Но! Вступает в противоречие с синтаксисом оператора декларации.
В старом добром Си этого всего не наблюдалось, т.к. декларации в заголовке цикла были напрочь запрещены.

Не по теме:

Я надеюсь, все понимают, что это - не полемика, а просто рассуждения about...

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.02.2016, 18:06     Как правильно объявить два счётчика в цикле for?
Еще ссылки по теме:

C++ Как правильно объявить массив строк c++
C++ Как правильно объявить структуру
C++ Как правильно объявить статический метод

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11807 / 6786 / 767
Регистрация: 27.09.2012
Сообщений: 16,840
Записей в блоге: 2
Завершенные тесты: 1
08.02.2016, 18:06     Как правильно объявить два счётчика в цикле for? #11
Цитата Сообщение от Байт Посмотреть сообщение
И обозримее, и короче, и не вводит новых сущностей.
только лучше всё это дело в scope запихнуть:
C++
1
2
3
4
{
   int i; double j;
   for(i=0, j=1.2; ...
}//дабы всякие i и j не проползали дальше отведенного им места применения.
Yandex
Объявления
08.02.2016, 18:06     Как правильно объявить два счётчика в цикле for?
Ответ Создать тему
Опции темы

Текущее время: 17:59. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru