Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/190: Рейтинг темы: голосов - 190, средняя оценка - 4.93
10 / 10 / 6
Регистрация: 27.07.2014
Сообщений: 269

Можно ли в цикле for объявить две переменных разного типа?

25.07.2015, 21:57. Показов 37395. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть такой цикл
C++
1
2
for(сhar s='A',int i=0; s<'Z'; s++,i++)
{}
Builder 6 выдает ошибки :
[C++ Error] Unit1.cpp(21): E2040 Declaration terminated incorrectly
[C++ Error] Unit1.cpp(21): E2451 Undefined symbol 'i'

В чем ошибка, в цикле нельзя объявить две переменных разного типа ?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.07.2015, 21:57
Ответы с готовыми решениями:

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

Можно ли так объявить имена переменных типа структуры
Страус пишет что &quot;имя нового типа можно использовать сразу же после его появления, а вовсе не после его полного определения&quot;. Для чего...

Сравнение переменных разного типа
Не задача, просто любопытно, почему именно так? static void Main(string args) { int i = 1; decimal j = 1; var...

9
 Аватар для Kollap
6 / 6 / 4
Регистрация: 13.07.2015
Сообщений: 23
25.07.2015, 22:09
Цитата Сообщение от AVATAR Посмотреть сообщение
в цикле нельзя объявить две переменных разного типа ?
нельзя
1
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
25.07.2015, 22:42
Лучший ответ Сообщение было отмечено SatanaXIII как решение

Решение

AVATAR,
все значения, перечисляемые через запятую должны быть одного типа

Добавлено через 9 минут
попробуй так
C++
1
  for (int s('A'), i(0); s < 'Z'; s++, i++)
2
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,870
25.07.2015, 22:46
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
попробуй так
или так
C++
1
for (char s = 'A', i=0; s < 'Z'; s++, i++)
но непонятно зачем это нужно
можно ведь и вычислить
C++
1
2
3
for (char s = 'A'; s < 'Z'; s++)
{
int i =s-'A';
1
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
25.07.2015, 22:50
AVATAR, а вобще такой цикл корректен по крайней мере только для кодировки asci
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
25.07.2015, 22:59
C++
1
2
3
4
5
6
7
8
{
    int i = 0;
    char s = 'A';
    for(; s < 'Z'; s++, i++)
    {
 
    }
}
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
27.07.2015, 09:43
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
int i = 0; char s = 'A'; for(; s < 'Z'; s++, i++) { }
Здесь переменные объявлены вне цикла.

Добавлено через 11 минут
Цитата Сообщение от AVATAR Посмотреть сообщение
в цикле нельзя объявить две переменных разного типа ?
Не только в цикле. Вообще нельзя перечислять через запятую декларации разнотипных переменных.

Добавлено через 1 час 11 минут
Цитата Сообщение от ValeryS Посмотреть сообщение
но непонятно зачем это нужно
можно ведь и вычислить
Код C++
Выделить код
1
2
3
for (char s = 'A'; s < 'Z'; s++)
{
int i =s-'A';
Вычитание бывает медленнее инкремента, так как требует загрузки двух операндов, так потом ещё и присваивание.
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
28.07.2015, 06:47
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
 
struct myTypesCollection
{
    char csymbol;
    int inumber;
    double dnumber;
};
 
typedef myTypesCollection my;
 
int main()
{
    const int LOOP_END = 4;
 
    for (my first = {'A', 0, 1.5}; first.inumber < LOOP_END; ++first.inumber)
    {
        first.dnumber *= first.dnumber;
        ++first.csymbol;
        std::cout << first.inumber << std::endl
                  << first.dnumber << std::endl
                  << first.csymbol << std::endl;
    }
 
    return 0;
}
1
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
28.07.2015, 07:26
Исключение - список формальных параметров, в нём запятая действует как точка с запятой и позволяет указывать независимый тип каждого параметра.
0
0 / 0 / 0
Регистрация: 24.10.2015
Сообщений: 1
19.12.2015, 21:29
В книге "Сиддхартха Рао. Освой самостоятельно C++ за 21 день, 2013" в 8-ом занятии, листинг 8.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
24
25
cout << "How many integers you wish to enter? ";
int InputNums = 0;
cin >> InputNums;
 
// Резервирование требуемого количества целых чисел
int * pNumbers = new int[InputNums];
 
int * pCopy = pNumbers;
 
cout << "Successfully allocated memory for " << InputNums << " integers" << endl;
for (int Index = 0; Index < InputNums; ++Index)
{
    cout << "Enter number " << Index << ": ";
    cin >> *(pNumbers + Index);
}
 
cout << "Displaying all numbers input: " << endl;
    
for (int Index = 0, int * pCopy = pNumbers; Index < InputNums; ++Index)
    cout << *(pCopy++) << " ";
 
cout << endl;
 
// Указатель больше не используется? Освободить память
delete[] pNumbers;
При попытке компиляции в Visual Studio, выдается такая ошибка:

C++
1
for (int Index = 0, int * pCopy = pNumbers; Index < InputNums; ++Index)
error C2062: type 'int' unexpected
warning C4552: '<' : operator has no effect; expected operator with side-effect
error C2143: syntax error : missing ';' before ')'

Цитата из книги: "Создавая копию в указателе pCopy и увеличивая ее содержимое, чтобы отобразить значение, цикл for использует несколько выражений инициализации".

То есть, Сиддхартха утвержает, что несколько инициализаций допустимо. Но у меня не компилируется этот код.
(Автор использует компилятор Visual C++ и является MVP Microsoft по Visual Studio).
Есть ли эксперты по C++, чтобы подтвердить есть ли какие-то оговорки по этому поводу в стандарте C++11?
Или автор все же ошибся с этой инициализацией - int * pCopy = pNumbers?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.12.2015, 21:29
Помогаю со студенческими работами здесь

Присвоение переменных разного типа
Использую я значит вот такую строку, пытаясь получить возвращаемые данные char и ulong. ULONG ModuleAddress, char ModuleName =...

Ввод и вывод переменных разного типа
Вот что у меня получилось: Program blabla; var lambda,pi,fi:real; y:integer; f,x:char; begin writeln('vvedite lambda, pi, fi,...

Определения знака переменных разного типа
Используя перегрузку функций, написать программу определения знака переменных разного типа.

Создание массива массивов разного типа переменных
Здравствуйте! Я новичок в скриптинге (C#), по этому возможно спрошу глупость, так как гугл не дал мне ответа. Задача: создать массив...

Чтение из файла построчно переменных разного типа
Есть файл исходных данных input.txt. там содержатся данные о сети (точки начала и конца ветвей, марки провода и т.п.) есть файл...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
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