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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.92
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 346
#1

Как использовать данные из цикла вне его - C++

29.04.2014, 18:35. Просмотров 1756. Ответов 69
Метки нет (Все метки)

Уважаемые модераторы прошу удалит предыдущую тему.

Так как я изучаю программирование самостоятельно часто появляются вопросы на которых неоткуда получит ответ кроме как спросит на форуме. По этому решил создать тему и поставит все свои вопросы которые есть сейчас и появятся в будущем в этой теме.

Буду очень благодарен если кто та из опытных программистов будет следит за темой.

И так вопрос 1. Как использовать данные из первого цикла вне цикла. Пришлось обработать все на одном цикле при выводе получается полный хаос.

код С++
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
31
32
33
34
35
int main()
{ setlocale (LC_ALL , "Russian");
    string text;
    string f;
    vector<string> vtext;
    
    std::cout << " Введите текст " << std::endl;
    if(std::getline(std::cin, text))
     
    int s = 5;
        for(string::size_type i = 0; i != text.size(); i++)
        { f = text[i];
        
        std::cout << text[i] << " ";
        
        vtext.push_back(f);
        std::cout << f << " ";
        text[i] = toupper(text[i]);
        std::cout << text[i] << " ";
        
    }
    int r = 2;
    char c = 'a';
        for(vector<string>::iterator it = vtext.begin(); it != vtext.end(); it++)
        {
    *it = r;
    r++;
    *it = c;
    c++;
    std::cout << *it << "-";
    }
        _getch ();
        
        return 0;
    }


Вопрос 2. Почему иногда переменное инициализированная перед циклом (for) не принимается в цикле. Пишет то переменная не инициализирована или не известна.

Вопрос 3. Сегодня учил библиотечный тип bitset. Привлекло внимание следующее:
Цитирую из книги:
" На машине с 32 - битовым типом unsigned long, шестнадцатеричное значение 0xffff представляется последовательностью из 16 битов, заполненных единицами , с последующими нулями до конца размера. Набор битов можно инициализировать с значением 0xffff следующим образом.
//набор bitvec1 меньше инициализирующего значения.
bitset<16> bitvec1(0xffff);
// размер набора bitvec2 и инициализирующая значение совпадают
bitset<32> bitvec2(0xffff);
Вот не понятно. Если 0xffff шестнадцатеричное то почему "// размер набора bitvec2 и инициализирующая значение совпадают
bitset<32> bitvec2(0xffff);"

Вопрос 4. Сегодня изучал итераторы. Написал программу которую показал на 1 вопросе. При использование вектора такой код не верен из за того что инициализированная значение r относится типу int а сам вектор типу string. Но при использование итератора не выдало не каких ошибок. И выводит некие символы. Не тарабарщина а определенные символы: Если написать Hello! получится смайлик, карточные знаки, символ ноты ( со звуком ). Если написать текст по больше получится эти символы и еще множество символов. Это ошибка программы или так и должно быт?
код C++
C++
1
2
3
4
5
6
7
8
9
10
int r = 2;
    char c = 'a';
        for(vector<string>::iterator it = vtext.begin(); it != vtext.end(); it++)
        {
    *it = r;
    r++;
    *it = c;
    c++;
    std::cout << *it << "-";
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.04.2014, 18:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как использовать данные из цикла вне его (C++):

В каком месте использовать конструктор - вне цикла или в цикле? - C++
Добрый день! Как писать правильнее? Ниже два примера: QStringList data; foreach(const QString &amp;category, categories) { data...

printf не выводи данные вне цикла. - C++
Здравствуйте! Проблема состоит в том,что если printf стоит внутри какого-нибудь цикла,то данные выводятся нормально,но если этот printf...

О том, почему нелюбим goto; как его правильно использовать; и чем в моем случае его можно заменить? - C++
Вот есть такой оператор всеми программистами нелюбимый. Goto называется. Говорят, что его использование всегда можно обойти и...

Как можно еще использовать std::placeholders вне в связки с std::bind? - C++
Добрый день! Как можно еще использовать std::placeholders вне в связки с std::bind?

Вывод результата вне цикла - C++
Написать программу, вычисляющую НОД (наибольший общий делитель) двух целых чисел Все работает,только вывод надо сделать вне цикла....

Применяя оператор цикла FOR вычислить y. Оператор if в теле цикла не использовать. Значение m и n вводить с клавиатуры. - C++
Применяя оператор цикла FOR вычислить y. Оператор if в теле цикла не использовать. Значение m и n вводить с клавиатуры. Шаг изменения...

69
intern
15 / 15 / 6
Регистрация: 30.03.2014
Сообщений: 74
Завершенные тесты: 2
30.04.2014, 18:36 #31
Чтобы понять, почему не работает цикл, разберитесь с библиотекой ввода-вывода.
Эти функции вам помогут:
std::cin.rdstate()
std::cin.clear()
std::cin.ignore()
0
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 346
30.04.2014, 19:23  [ТС] #32
intern, спасибо за подсказку!
0
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 346
03.05.2014, 08:45  [ТС] #33
Придется повторит вопрос.
Как использовать данные которые инициализированы в цикле вне этого цикла?
При обращение к переменным вне цикла система их просто не видит.
0
intern
15 / 15 / 6
Регистрация: 30.03.2014
Сообщений: 74
Завершенные тесты: 2
03.05.2014, 08:57 #34
Есть такое понятие - область видимости.
Перемененная, объявленная в цикле, доступна только в нем.
0
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 346
03.05.2014, 09:47  [ТС] #35
intern, и нет не какого способа использовать данные вне цикла? Какая то ссылка или что та еще.
0
TenGen
Будущее рядом
98 / 96 / 20
Регистрация: 06.03.2014
Сообщений: 342
03.05.2014, 09:48 #36
Altair42, объявляйте переменные до цикла... других способов нет
0
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 346
03.05.2014, 10:42  [ТС] #37
Тогда подскажите как переписать этот част кода чтоб вывод был отдельным. Если ввести 3 символа qwe вывод будет таким qqQ wwW eeE. Ибо в цикле 3 разные команды. Данные сохраняются и выводятся, потом те же данные переписываются в вектор и выводятся, каждый символ в нижнем регистре переводится на верхний и выводится. Как делать чтоб вывод был таким:
qwe
qwe
QWE

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int main()
{ setlocale (LC_ALL , "Russian");
    string text;
    string f;
    vector<string> vtext;
    
    std::cout << " Введите текст " << std::endl;
    if(std::getline(std::cin, text))
     
    int s = 5;
        for(string::size_type i = 0; i != text.size(); i++)
        { f = text[i];
        
        std::cout << text[i] << " ";
        
        vtext.push_back(f);
        std::cout << f << " ";
        text[i] = toupper(text[i]);
        std::cout << text[i] << " ";
        
    }
Добавлено через 6 минут
Я не могу составит 3 разные циклы ибо используется один ввод. Все 3 цикла должны видеть один и тот же индекс.

Можно сохранит ввод по отдельности в string, vector и отдельно менять символы с нижнего регистра на верхний. Но надо перевести на vector с string, данные которые сохранены в векторе перезаписать и вывести в верхнем регистре.
0
TenGen
Будущее рядом
98 / 96 / 20
Регистрация: 06.03.2014
Сообщений: 342
03.05.2014, 10:46 #38
Altair42, предлагаю в первом цикле считывать и сохранять данные, а потом вне цикла вывести данные вначале из одной строки, затем из вектора, затем третье значение
0
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 346
03.05.2014, 11:07  [ТС] #39
TenGen, уже пробовал не получается. Как бы я для вывода использую переменную "i" которая инициализирована внутри цикла. Можно попробовать использовать цикл while но не уверен что получится. Потом с этим циклом код проще.
C++
1
2
text[i] = toupper(text[i]);
        std::cout << text[i] << " ";
0
TenGen
Будущее рядом
98 / 96 / 20
Регистрация: 06.03.2014
Сообщений: 342
03.05.2014, 11:21 #40
Altair42, логично, что вам нужно будет еще три цикла (в которых тоже будет переменная i)
0
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 346
03.05.2014, 11:26  [ТС] #41
TenGen, а как же взаимодействие? Vector уже сохранен, индексирован. Если ввести еще одну переменную не будет ли проблем? В данный момент программа не такая уж сложная и работает с несколькими буквами ( может текст но это мало имеет значение) Что если делать это в большой программе?

Я к тому что если в vector -e сохранены некие габаритные данные то, чтоб использовать другую переменную i надо будет переписать огромный участок кода чтоб программа видел все как есть. Или этого не потребуется?
0
TenGen
Будущее рядом
98 / 96 / 20
Регистрация: 06.03.2014
Сообщений: 342
03.05.2014, 11:31 #42
Altair42, vtext.push_back(f); не означает, что туда засунули переменную f. Это означает, что было использовано значение из переменной f. Вектору (да и другим вещам) без разницы, как называются передаваемые переменные и сколько у вас их объявлено.
И в вашем случае дополнительные циклы нужны. Вы ведь хотите вначале вывести все элементы строки, затем все элементы вектора.
0
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 346
03.05.2014, 11:47  [ТС] #43
Я не хочу вывести элементы из строки.
Я хочу.
- сохранит элементы используя стринг для далнейшей работы с той библиотекой при необходимости.
- сохранит элементы стринга в векторе ( Возможно измененные. А значит ввести в вектор элементы которых вводил с консоли ошибка)
- сохранит элементы вектора переобразововая их.
- вывести элементы стринга.
- вывести элементы вектора.
- вывести переобразованные элементы вектора.

И на счет vtext.push_back(f); Я не засунул туда отделную переменную. Я просто присвоил элемент переменной text[i] к f. Ибо в векторе не мог сохранит элемент стиринга в изначальном виде (vtext.push_back(text[i]) выдавал ошибку).

Наверно я не так выразился. Переменная i отслеживает и индексирует элементы string если ввести другую переменную i то программа не сможет видеть те элементы которые индексированы с помощью другой переменной i. Это как бы есть вы с ником TenGen в этом форуме, но и есть другой человек с таким же ником но совсем в другом форуме. Ваши данные не как не могут совпадать потому что у вас одинаковые ники.
В польне вероятно что именно эта программа будет работать с новой переменной i ибо тут нет сложных операций. Это будет как сохранит вводимые с консоли данные отдельно в стринг и в вектор. А не так чтоб сохранит данные стринг, которые были сохранены с ввода с консоли, в вектор. То есть если добавит какую то операцию из библиотеки стринг то ваш вариант не сработает. ибо элементы стринга будут изменены, в векторе сохранится не измененные элементы стринга а изначально сохраненные в нем.
0
Denis123456789
43 / 43 / 17
Регистрация: 02.06.2013
Сообщений: 181
03.05.2014, 12:24 #44
Altair42, какова цель задачи? Вывести слово со всеми комбинациями букв в нижнем и верхнем регистре? Например, на входе получаем qwe, тогда выводим qwe, Qwe, qWe, QWe, qwE,QwE, qWE, QWE, так?
0
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 346
03.05.2014, 12:59  [ТС] #45
Denis123456789, я написал цел задачи
Цитата Сообщение от Altair42 Посмотреть сообщение
Я не хочу вывести элементы из строки.
Я хочу.
- сохранит элементы используя стринг для далнейшей работы с той библиотекой при необходимости.
- сохранит элементы стринга в векторе ( Возможно измененные. А значит ввести в вектор элементы которых вводил с консоли ошибка)
- сохранит элементы вектора переобразововая их.
- вывести элементы стринга.
- вывести элементы вектора.
- вывести переобразованные элементы вектора.
0
03.05.2014, 12:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.05.2014, 12:59
Привет! Вот еще темы с ответами:

как объявить правильно tr и как его использовать при вызове функции? - C++
main.cpp case 8: cout &lt;&lt; &quot;Firs trapec # is: &quot;; cin &gt;&gt; k; k = k - 1; cout &lt;&lt; &quot;Second trapec # is: &quot;; cin &gt;&gt; j;...

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

метод класса,как использовать его - C++
в классе есть функция как ее вызвать из главной функции?

Указатель this - как и когда его использовать - C++
Объясните, зачем нужен указатель this, как его применять в классах, если можно небольшой пример.


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

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

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