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

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

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

Как локальную переменную сделать глобально, при это сохранив накопленное в ней значение? - C++

16.09.2013, 09:34. Просмотров 813. Ответов 9
Метки нет (Все метки)

Ребята, помогите, пожалуйста.
Вот, например, есть такой код:

C++
1
2
3
4
for (int i=0; i<10; ++i) {
  /* здесь делается что-то полезное */
}
std::cout << "Цикл закончился. i равно " << i;
Но он, ясно, не будет работать, так как переменная i является локальной для блока цикла и не существует за его пределами. Как эту переменную i сделать глобальной, если мне надо дальше использовать накопленное в ней значение?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.09.2013, 09:34     Как локальную переменную сделать глобально, при это сохранив накопленное в ней значение?
Посмотрите здесь:

C++ Как обычную переменную сделать константой
C++ Как сделать так чтобы при развертывании окна во весь экран все объекты на форме размещались по ней равномерно?
C++ Как объявить переменную глобально?
C++ нужно создать таблицу из 3 строк и 4 столбцов и заполнить её (любой информацией,это неважно) . Как это можно сделать ?
Ошибка E2363 Попытка возвратить локальную переменную C++
C++ Возвращение ссылки на локальную переменную
C++ VS2010 отладчик не видит локальную переменную
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nijaz
34 / 34 / 9
Регистрация: 16.12.2010
Сообщений: 100
16.09.2013, 09:47     Как локальную переменную сделать глобально, при это сохранив накопленное в ней значение? #2
C++
1
2
3
4
5
int i=0;
for (i=0; i<10; ++i) {
  /* здесь делается что-то полезное */
}
std::cout << "Цикл закончился. i равно " << i;
Ilot
Модератор
Эксперт С++
1784 / 1159 / 224
Регистрация: 16.05.2013
Сообщений: 3,050
Записей в блоге: 5
Завершенные тесты: 1
16.09.2013, 10:01     Как локальную переменную сделать глобально, при это сохранив накопленное в ней значение? #3
Цитата Сообщение от iamthewine Посмотреть сообщение
Ребята, помогите, пожалуйста.
Вот, например, есть такой код:

C++
1
2
3
4
for (int i=0; i<10; ++i) {
  /* здесь делается что-то полезное */
}
std::cout << "Цикл закончился. i равно " << i;
Но он, ясно, не будет работать, так как переменная i является локальной для блока цикла и не существует за его пределами. Как эту переменную i сделать глобальной, если мне надо дальше использовать накопленное в ней значение?
На самом деле ответ на вопрос зависит от многих факторов. В частности это зависит от компилятора. Например мой компилятор ваш код спокойно откомпилирует. Так как для некоторых компиляторов переменная объявленная в цикле определена и далее в том же блоке где находится сам цикл, но это не панацея.
В С++ для решения подобных проблем существует ключевое слово static. Переменная обявленная статической существует все время выполнения программы и в этом отношении аналогична глобальной, но объявляется и имеет область видимости как локальная.
iamthewine
0 / 0 / 0
Регистрация: 15.09.2013
Сообщений: 6
16.09.2013, 10:16  [ТС]     Как локальную переменную сделать глобально, при это сохранив накопленное в ней значение? #4
Спасибо большое.
Вот у меня есть такой кусок программы, где мне надо узнать является ли число сбалансированным простым числом (Простые числа, которые являются средним арифметическим предыдущего простого числа и следующего простого числа):
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
float IsABalancedNumber (int x) {
    int i;
    int mas [10000];
    int j=0;
        for (i = 2; i <= x; i++) {
            if ((x % i != 0)) {
                mas[j] =x;
                j++;
            } 
            else {
                cout << "Ошибка!" << "\n";
            }
            return 0;
        }
 
    int s;
    for (s=1; s+1 <= j-1; s++) {
        if (mas[s] == (mas [s-1] + mas [s+1])/2) {
            cout << "Это сбалансированное простое число" << "\n";
            system ("PAUSE");
            return 0;
        }
        else {
            cout << "Это не сбалансированное простое число" << "\n";
            system ("PAUSE");
            return 0;
        }
    }
    return 0;
}
Идея: закинуть все простые числа в массив, далее проверять на условие сбалансированного простого числа.
j мне нужна после первого цикла. Куда в этом случае поставить "private"?
И вообще, корректно ли я реализую идею?

P.S. Только начинаю изучать С++.
Croessmah
16.09.2013, 10:22
  #5

Не по теме:

Цитата Сообщение от Ilot Посмотреть сообщение
Например мой компилятор ваш код спокойно откомпилирует. Так как для некоторых компиляторов переменная объявленная в цикле определена и далее в том же блоке где находится сам цикл, но это не панацея.
может стоит обновить старье?

ValeryS
Модератор
6485 / 4951 / 455
Регистрация: 14.02.2011
Сообщений: 16,400
16.09.2013, 10:39     Как локальную переменную сделать глобально, при это сохранив накопленное в ней значение? #6
Цитата Сообщение от iamthewine Посмотреть сообщение
j мне нужна после первого цикла. Куда в этом случае поставить "private"?
не понял причем тут private
а что тебе не нравится в своем коде?
можешь объявить её перед самым циклом
до её объявления её не будет видно
а потом до конца функции
если нужно только на определенном участке то можно сделать блок
например так

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int fnc()
{
  ....................
  {
    int j;
    for (j=0;j<10;j++)
    { 
    // здесь j видна
    }
  ..............
   // здесь тоже
 }
// а здесь уже нет
..............
}
но память это тебе не сэкономит
Ilot
Модератор
Эксперт С++
1784 / 1159 / 224
Регистрация: 16.05.2013
Сообщений: 3,050
Записей в блоге: 5
Завершенные тесты: 1
16.09.2013, 10:54     Как локальную переменную сделать глобально, при это сохранив накопленное в ней значение? #7

Не по теме:

Цитата Сообщение от Croessmah Посмотреть сообщение
может стоит обновить старье?
Ну так я уже пытался перейти на wxDev. Однако с ним последнее время стали происходить непонятные вещи. При попытке создать новый проект вылетает без сообщения об ошибке. Так что приходится пользоваться ломаным VS 6.


iamthewine, массив вам не нужен. Используйте три переменные для хранения трех последовательных простых чисел. Весь алгорит можно построить например таким образом:
1. Найти очередное простое число
2. Проверить на "сбалансированность"
3. Передвинуть переменные вперед.
4. Перейти к первому шагу.
Идея: закинуть все простые числа в массив...
Этого у вас не получится так как их бесконечное множество... Ну или очень много.
j мне нужна после первого цикла. Куда в этом случае поставить "private"?
private это относится к классам. Вы что-то путаете. А j там пусть и стоит.
ValeryS
Модератор
6485 / 4951 / 455
Регистрация: 14.02.2011
Сообщений: 16,400
16.09.2013, 11:05     Как локальную переменную сделать глобально, при это сохранив накопленное в ней значение? #8
Цитата Сообщение от Ilot Посмотреть сообщение
Так что приходится пользоваться ломаным VS 6.
бесплатными студиями 2008, 2010, 2012 ,бесплатным Qt
короче куча IDE имя им легион

Добавлено через 5 минут
Цитата Сообщение от Ilot Посмотреть сообщение
пользоваться ломаным VS 6.
для шестерки, чтобы она соответствовала стандарту есть костыль-макрос
пишу на память давно не пользовался, но что то типа

C++
1
#define for  if(0) else for
iamthewine
0 / 0 / 0
Регистрация: 15.09.2013
Сообщений: 6
16.09.2013, 11:17  [ТС]     Как локальную переменную сделать глобально, при это сохранив накопленное в ней значение? #9
Ilot, спасибо вам большое! Сейчас попробую все переделать.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.09.2013, 13:04     Как локальную переменную сделать глобально, при это сохранив накопленное в ней значение?
Еще ссылки по теме:

Как глобально объявить указатель структуры, и переменные хранящиеся в ней? C++
C++ Как сделать переменную строковой C++
Возврат ссылки на локальную переменную C++
Как в данном контексте правильно разместить статическую локальную переменную? C++
C++ Передать локальную переменную в новую функцию

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

Или воспользуйтесь поиском по форуму:
alsav22
16.09.2013, 13:04     Как локальную переменную сделать глобально, при это сохранив накопленное в ней значение?
  #10

Не по теме:

Цитата Сообщение от Ilot Посмотреть сообщение
Так что приходится пользоваться ломаным VS 6.
Раз уж пользуетесь студией, то можно, как предлагает ValeryS, поставить и более новую. Если хотите что-то небольшое (типа DevC++, а она не работает у вас), то можно попробовать Code Blocks.

Yandex
Объявления
16.09.2013, 13:04     Как локальную переменную сделать глобально, при это сохранив накопленное в ней значение?
Ответ Создать тему
Опции темы

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