0 / 0 / 0
Регистрация: 24.01.2014
Сообщений: 27
1

Вопрос об области видимости переменной

24.01.2014, 16:30. Показов 1473. Ответов 7
Метки нет (Все метки)

У меня в проге один главный цикл и в этом цикле еще 4 цикла. Так вот, в начале главного цикла я написал int i =0; Вопрос, этот i = 0 будет для всей проге задан или когда прога перейдет в следущий цикл или if else она обнулится? Например я в первом if else или цикле задал int i = 0, во втором цикле или if else будет задано, что есть переменная i типа int со значением 0 или это значение действует только до следущего цикла или f else, с переходом на одно из них оно недействительно и нужно заного писать?
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
27
28
29
30
int main()
{
    setlocale(0, "Russian");
    int c, i = 0;  //вот тут задано что есть int i = 0!
    cout << "\t\t***Многофункциональный калькулятор***\n\n";
    do
    {
        cout << "\nВыбирите мод:\nОбычный:\t\t[1]\nКв. корень:\t\t[2]\nУр-ие вида ax^2+bx+c:\t[3]\nТригонометрические ф-ии:[4]\nВаш выбор: ";
        cin >> c;
        if (c == 1)
        {
            double a, b, rez;
            char z;
            int i = 0; //нужно ли тут вписывать это? или та первая надпись является значением и этого?
            cout << endl << "_________________________" << endl;
            cout << "Вы включили мод: обычный." << endl;
            cout << "-------------------------";
            do
            {
                cout << "\nВведите число_знак_число: ";
                cin >> a >> z >> b;
                switch (z)
                {
                case '+': rez = a + b; cout << "Результат: " << rez; break;
                case '-': rez = a - b; cout << "Результат: " << rez; break;
                case '*': rez = a*b; cout << "Результат: " << rez; break;
                case '/': rez = a / b; cout << "Результат: " << rez; break;
                default: cout << "Ошибка!";
                }
            } while (i < 1);
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.01.2014, 16:30
Ответы с готовыми решениями:

Получить значение переменной из другой области видимости
есть такой код var glob = 0; tasks.category('select *from category',function(err, tasks) {...

Области видимости
Если я запихиваю любые операции (в данном случае задание и заполнение массива); То далее не видит,...

Области видимости переменных
Скорее всего тут все происходит от незнания. Приведу скрипт. var couchbase =...

Области видимости объектов
Здравствуйте. Подскажите, пожалуйста, по каким правилам объекты в java видны или соответственно не...

7
653 / 574 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
24.01.2014, 16:37 2
переменная видна только в то области видимости в которой она объявлена, соответственно так
C++
1
2
3
4
5
6
7
8
if()
{
int i = 0;
}
else 
{
i = 50;
}
не будет работать потомучто ветка else это другая область видимости

или еще пример
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
if()
{
int i = 0;
if()
{
int i = 10;
cout<<i;//тут будет вывод посл объявленной i потому что при повторном объявлении i обяъвленная выше будет скрыта последним объявлением
}
else
{
 
}
}
else
{
 
}
0
0 / 0 / 0
Регистрация: 24.01.2014
Сообщений: 27
24.01.2014, 17:16  [ТС] 3
aLarman, как определить в какой области объявлена переиенная и когда она не будет действовать??
0
:)
Эксперт С++
4769 / 3263 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
24.01.2014, 17:40 4
Цитата Сообщение от aLarman Посмотреть сообщение
переменная видна только в то области видимости в которой она объявлена
ну зачем так неосторожно. Можно ведь получить доступ к глобальной переменной внутри функции, даже если в функции определена своя, локальная переменная, с таким же именем.
см. оператор разрешения области видимости
0
319 / 225 / 73
Регистрация: 22.11.2013
Сообщений: 856
Записей в блоге: 1
24.01.2014, 17:58 5
Цитата Сообщение от uranium_238 Посмотреть сообщение
как определить в какой области объявлена переиенная и когда она не будет действовать?
Она должна быть объявлена до обращения к ней, пример 1 aLarman-а очень нагляден:
C++
1
2
3
4
5
6
7
8
if()
{
int i = 0;
}
else 
{
i = 50;
}
Если условие 1 не выполняется то переход сразу на 7 строчку, т.е. минуя 3 строчку где она объявляется
Вообще объявление в строчке 3, то он будет видна в коде между 3 и 4 строчками. Вот еще один пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <cstdlib>
#include <iostream>
 
using namespace std;
 
int main()
{
int i=0;
if (true)
{
    int i=4;//Это переопределение i
    cout<<i<<endl; //здесь выдаст 4 и эта фактически последняя строчка где она видна с новым определение
}
cout<<i<<endl;// а здесь выдаст 0 т.к. то определение здесь уже не видно, т.к. мог быть случай что if не сработал, т.е не было бы нового определения int i=4; 
system("Pause");
}
Добавлено через 1 минуту
Цитата Сообщение от Tulosba Посмотреть сообщение
ну зачем так неосторожно. Можно ведь получить доступ к глобальной переменной внутри функции, даже если в функции определена своя, локальная переменная, с таким же именем.
см. оператор разрешения области видимости
Ну высший пилотаж
это не для новичков это тогда ошибки в их кодах искать можно годами)

Добавлено через 11 минут
Решил привести такой пример до кучи:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <cstdlib>
#include <iostream>
int i=0;//глобальная переменная
using namespace std;
 
 
int main()
{
int i=0,k=1;
if (k==1)
{
    int i=4;//локальная переменная
    cout<<i<<endl;//Здесь 4 обращение к локальной
    cout<<::i<<endl; //Здесь 0 обращение к глобальной
}
cout<<i<<endl;////Здесь 0 обращение к глобальной
system("Pause");
}
1
5480 / 4875 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
24.01.2014, 20:02 6
Цитата Сообщение от mustimur Посмотреть сообщение
16) cout<<i<<endl;////Здесь 0 обращение к глобальной
С чего бы это?
Вот так нипишите:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
i#include <cstdlib>
#include <iostream>
int i = 0;//глобальная переменная
using namespace std;
 
 
int main()
{
int i = 3,k = 1;
if (k==1)
{
    int i=4;//локальная переменная
    cout<<i<<endl;//Здесь 4 обращение к локальной
    cout<<::i<<endl; //Здесь 0 обращение к глобальной
}
cout<<i<<endl;////Здесь 3 обращение к локальной, объявленной в main() до if().
system("Pause");
}
1
319 / 225 / 73
Регистрация: 22.11.2013
Сообщений: 856
Записей в блоге: 1
24.01.2014, 20:05 7
Цитата Сообщение от alsav22 Посмотреть сообщение
С чего бы это?
Точно, я копируя забыл удалить первый int в main, задумывалось так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <cstdlib>
#include <iostream>
int i=0;//глобальная переменная
using namespace std;
 
 
int main()
{
int k=1;
if (k==1)
{
    int i=4;//локальная переменная
    cout<<i<<endl;//Здесь 4 обращение к локальной
    cout<<::i<<endl; //Здесь 0 обращение к глобальной
}
cout<<i<<endl;////Здесь 0 обращение к глобальной
system("Pause");
}
Но вам спасибо, еще один пример создали по теме))
1
Форумчанин
Эксперт CЭксперт С++
8170 / 5020 / 1436
Регистрация: 29.11.2010
Сообщений: 13,453
25.01.2014, 02:37 8
до кучи
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
int i; // глобальная переменная i
 
void foo()
{
    std::cout << i << " ";
}
 
int main()
{
    foo(); // неинициализированные явно глобальные переменные равны 0
    int i = 2;
    foo();  // объявление локальной переменной i никак не влияет на глобальную переменную
    ::i = 1;
    foo();  // значение глоабльной переменной i поменялось (явно указали global scope)
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.01.2014, 02:37

Области видимости переменных, C#
Темный лес для меня эти области видимости, но разбираться надо, большую часть вроде разобрал, но...

Области видимости в Builder
Совсем запутался с областью видимости описываю класс-в том же модуле из обработчика событий кнопки...

Масштабирование области видимости
glm::mat4 g_projMatrix = glm::ortho( x1, x2, y1, y2, z1, z2); А вот...

Области видимости переменных
Когда последняя инструкция в foo присваивает новое значение переменной x, компилятор решает, что...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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