Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/130: Рейтинг темы: голосов - 130, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 01.02.2012
Сообщений: 5

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

01.02.2012, 21:26. Показов 25932. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.

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

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)? Или я что-то не понял?

Нигде в литературе я не находил опровержение тому, что нельзя в заголовке цикла использовать объявления нескольких локальных управляющих переменных.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.02.2012, 21:26
Ответы с готовыми решениями:

как работают одновременно два счетчика в цикле
помогите найти информацию, о том, как работают два счетчика в цикле!! например тут: (во всем интеренете объясняют только про один...

Как правильно объявить переменные в цикле?
Привет всем, у меня есть кусок кода, который надо объявлять на автомате вот этот кусок group1 = new ymaps.GeoObjectArray({ ...

Объявить два интерфейса. Объявить два класса, первый из которых реализует один из интерфесов, а второй - оба
Помогите написать программу,несеку фишку.Объявить два интерфейса. Объявить два класса, первый из которых реализует один из интерфесов, а...

10
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
01.02.2012, 21:34
Мой телепатический угадыватель подсказывает мне, что, вероятно, ты хотел этого:
C++
1
for(int i=0, j=0 ; i<10 && j<10 ; i++, j++) { ... }
1
0 / 0 / 0
Регистрация: 01.02.2012
Сообщений: 5
01.02.2012, 21:50  [ТС]
Да нет.
Суть вопроса именно в том, почему не проходит такая запись:
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++ )
Вопрос касается исключительно такой записи, а не её вариаций.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9006 / 4707 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
01.02.2012, 22:00
Опоздал.
0
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
01.02.2012, 22:10
Цитата Сообщение от vsp Посмотреть сообщение
Суть вопроса именно в том, почему не проходит такая запись:
C++
1
2
for(int i = 0, j = 5; i < j; ++i)
    ;
Про запятую в условии сказали уже. А вариант с int + double вообще не покатит.
0
17 / 18 / 0
Регистрация: 01.02.2012
Сообщений: 182
01.02.2012, 23:47
vsp,
По законам с++ , в циклах for возможно только одно условие, то есть for(int i=0 , int j=0 ; j<10 ; i++ , j++) или for(int i=0 , int j=0 ; i<10 ; i++ , j++)
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
08.02.2016, 08:33
Цитата Сообщение от Kimel Посмотреть сообщение
По законам с++ , в циклах for возможно только одно условие, то есть for(int i=0 , int j=0 ; j<10 ; i++ , j++) или for(int i=0 , int j=0 ; i<10 ; i++ , j++)
Ошибка будет.
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
08.02.2016, 11:58
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 минуты
ЗЫ. Мысль вашу лично я (и, надеюсь, все остальные участники) прекрасно понимаю. Но как ее объяснить компилятору? И это меня наполняет гордостью за человечество...
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
08.02.2016, 14:20
Цитата Сообщение от Байт Посмотреть сообщение
Но как ее объяснить компилятору?
Легко:

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;
}
4
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
08.02.2016, 14:51

Не по теме:

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

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

Добавлено через 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...

3
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
08.02.2016, 18:06
Цитата Сообщение от Байт Посмотреть сообщение
И обозримее, и короче, и не вводит новых сущностей.
только лучше всё это дело в scope запихнуть:
C++
1
2
3
4
{
   int i; double j;
   for(i=0, j=1.2; ...
}//дабы всякие i и j не проползали дальше отведенного им места применения.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.02.2016, 18:06
Помогаю со студенческими работами здесь

Переменная, которая только что использовалась в цикле в качестве счётчика в следующем цикле не используется
Помогите, пожалуйста. Вот отрывок программы (программа целиком- в архиве): procedure TForm1.Button1Click(Sender: TObject); begin ...

Как прибавить к имени переменной номер счётчика в цикле?
Есть такая конструкция: for(int i = 1; i &lt; 7; i++) { logic_uScriptAct_SpawnPrefab_uScriptAct_SpawnPrefab_i.FinishedSpawning +=...

Как объявить в цикле переменные разного типа
переменные объявленная в цикле вот например в данном случае for(int i=1,k=0;i&lt;=10;i++) после цикла использовать не льзя т.е. i и k...

Как Насипов узнал, что в цикле максимальное значение счетчика цикла пересчитывается на каждой итерации?
Курс ведет Гилев, но они вместе с Насиповым сейчас делают этот курс. Не суть. В общем, процитирую близко к тексту. Для Индекс =...

Как разместить два счетчика в Гугл Аналитикс
Добрый день! С яндекс.метрикой я справилась. Не могу понять, как разместить несколько счетчиков в гугл аналитикс. В общем имеется один...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru