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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
lest_
0 / 0 / 0
Регистрация: 28.11.2013
Сообщений: 94
#1

Почему можно переопределять переменную в цикле? - C++

26.05.2014, 18:01. Просмотров 231. Ответов 4
Метки нет (Все метки)

привет.

Привожу листинг из учебника. Это есть програмка для вывода меню на экран. Ненужные куски кода убрал.
C++
1
2
3
4
5
6
7
8
9
10
11
// ...
int main()
{
    // код... 
    for(;;) // бесконечный цикл
    {
        int choice = menu();
        // что-делаем...        
    } // конец бесконечного цикла           
    return 0;     
} // конец main()
Здесь есть бесконечный цикл (строки 5-9). Мне не понятна строчка 7. Здесь создаётся и инициализируется переменная choice. Инициализируется она значением, которое возвращает функция menu. Затем что-то делается в цикле (выводятся всякие сообщения на экран и т.п.). Потом цикл повторяется снова (если условие выхода не выполнено). Что происходит, когда мы повторяем цикл? Создаётся новая переменная по имени choice, а старая становится недоступной? Или он использует ту же самую переменную?

Просто если написать так:
C++
1
2
3
4
5
int main()
{
    int a = 10;
    int a = 10;
//...
то компилятор пометит строку 4 как ошибку и напишет: "error C2374: a: переопределение; множественная инициализация". В случае с циклом, вроде бы что-то аналогичное происходит, но при этом программа запускается, и компилятор ошибок не выдаёт. Но при этом не понятно, что происходит. Можно вообще переписать это как-то более ясно? Я попробовал так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
// ...
int main()
{
    // код... 
    int choice;
    for(;;) // бесконечный цикл
    {
        choice = menu();
        // что-делаем...        
    } // конец бесконечного цикла           
    return 0;     
} // конец main()
то есть, определяю переменную 1 раз в строке 5. А на каждой итерации цикла просто присваиваю переменной новое значение, посчитанное функцией. Вроде програмка также работает. Но при этом в учебнике используется непонятный вариант 1.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.05.2014, 18:01
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Почему можно переопределять переменную в цикле? (C++):

Почему нужно переопределять метод, для использования ? - C++
Всем привет есть такой код : class A { private: int var; public: A() { var = 0 } int getVar() { ...

Не считывает вторую переменную в цикле - C++
Ребят, подскажите , никак не пойму почему у меня не считывает вторую переменную, хотя код вроде верный. Как только цикл убираю , то все ок....

Создать два потока, которые в конечном цикле инкримируют 1 переменную заданое число раз - C++
Дядьки и Тетьки Я только начал что изучать, что-то похожее на С++ но не уверен, если не прав прошу тему перенести. Но Помогите с задачкой:...

Почему в цикле do...while переменная a оказывается необъявленной? - C++
Почему в этом коде не while не проверяет переменную "a"? : #include <iostream> #include <cstdlib> #include <cstdio> using...

Подскажите почему не правильно считает в цикле for! - C++
Подскажите почему не правильно считает в цикле! Задание: 1-1/2+1/3-1/4+...1/n #include <iostream> using namespace std; int...

Не срабатывает условие в цикле while не могу понять почему - C++
При решении задачки в которой необходимо сделать игру Однорукий Бандит, наткнулся при тестировании что одно из условий цикла while не...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
alsav22
5420 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.05.2014, 18:16 #2
...
Цитата Сообщение от lest_ Посмотреть сообщение
Что происходит, когда мы повторяем цикл?
Цитата Сообщение от lest_ Посмотреть сообщение
Создаётся новая переменная по имени choice, а старая становится недоступной
1
0x10
2464 / 1636 / 238
Регистрация: 24.11.2012
Сообщений: 4,031
26.05.2014, 18:21 #3
Цитата Сообщение от lest_ Посмотреть сообщение
Можно вообще переписать это как-то более ясно? Я попробовал так:
Как правило, переменные стараются делать как можно более локальными. Если переменная используется только в цикле и не нужна за его пределами, значит, ее объявлению место в теле цикла.
1
lest_
0 / 0 / 0
Регистрация: 28.11.2013
Сообщений: 94
26.05.2014, 19:17  [ТС] #4
Цитата Сообщение от 0x10 Посмотреть сообщение
Как правило, переменные стараются делать как можно более локальными. Если переменная используется только в цикле и не нужна за его пределами, значит, ее объявлению место в теле цикла.
а может так случиться, что память кончится? ведь на каждой итерации создаётся новая переменная. а вдруг итераций оч много будет
0
alsav22
5420 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.05.2014, 19:19 #5
Цитата Сообщение от lest_ Посмотреть сообщение
а может так случиться, что память кончится? ведь на каждой итерации создаётся новая переменная. а вдруг итераций оч много будет
После каждой итерации память под перемнной будет освобождаться.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.05.2014, 19:19
Привет! Вот еще темы с ответами:

Почему счетчик в цикле for начинается с нуля, а не с единицы? - C++
привет. почему когда надо сделать какое-то действие, например 4 раза, то пишут: for (int i=0, i<4, i++) { //... } а не так: ...

В цикле почему-то проходит по условию только один раз - C++
Задача такая: Дан одномерный массив и натуральных чисел. Удалить из него все тройки подряд идущих равных чисел, и вывести размер...

Подскажите почему он не выводит переменную S - C++
Подскажите почему он не выводит переменную S //--------------------------------------------------------------------------- #pragma...

почему линковщик не видит статическую переменную: - C++
почему линковщик не видит статическую переменную: файл aaa.h class aaa { protected: static CStringArray...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
26.05.2014, 19:19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru