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

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

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

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

29.04.2014, 18:35. Просмотров 1751. Ответов 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
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 346
29.04.2014, 19:41  [ТС] #16
Цитата Сообщение от alsav22 Посмотреть сообщение
А зачем int присваивать string? Чтобы потом вопросы не форуме задавать?
Я учусь. И должен экспериментировать. Если бы я не присвоил инт к стирнг не узнал бы что итератор может работать так. А спросил на форуме чтоб утвердит свое знание. Если просто везение что это сработало?
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.04.2014, 19:42 #17
Цитата Сообщение от Altair42 Посмотреть сообщение
Как тебе понравится если за тебя кто та будет жевать еду?
Разжёвывание - это объяснение кода, чего вы и хотите. Не хотите разжёвывания - сами разбирайтесь, как код работает, пользы будет больше.
0
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 346
29.04.2014, 19:52  [ТС] #18
Цитата Сообщение от alsav22 Посмотреть сообщение
Где там вектор, и где там запомни? Читайте дальше книгу.

C++
1
2
3
4
5
6
std::cout << "Введите несколько чисел" << std::endl;
while(std::cin >> n) //Это разве не означает что при вводе n 
     num.push_back(n); //n будет присвоено в конец вектора num 
                                //( а вектор в свою очеред запомнит его как последный элемент)
std::cin.clear();
while (std::cin.get() != '\n');
Добавлено через 5 минут
alsav22, Мне кажется вы сердитесь Вот мы обсуждаем элементы кода. Вот это объяснение. А готовый код иногда кажется... как сказать. Как будто я только учусь водит машину мне дали управлять самолетом.
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.04.2014, 19:56 #19
Вот мой код:
C++
1
2
std::cin.clear();
while (std::cin.get() != '\n');
Цитата Сообщение от alsav22 Посмотреть сообщение
Где там вектор, и где там запомни?
Или вы свой код не понимаете?
0
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 346
29.04.2014, 20:03  [ТС] #20
Я очень любознательный. Люблю "тыкать куда попало" чтоб посмотреть что будет. Так и учусь. Часто возникают вопросы что? и почему? которые не редко бесит окружающих. Прошу понять и жаловать

Добавлено через 4 минуты
alsav22, Ну этот код я написал несколько дней назад до тех пор много чего написал. Я обычно не запоминаю то что не важна ( как например код которого уже написал. Знаю способ не надо помнит код).
Приношу извинение
Цитата Сообщение от alsav22 Посмотреть сообщение
Код C++


1 std::cin.clear();
2 while (std::cin.get() != '\n');
1 - как я понял очищает буфер обмена?
2 - продолжает цикл ока не будет введен энтер?
0
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
29.04.2014, 20:04 #21
Цитата Сообщение от Altair42 Посмотреть сообщение
как я понял очищает буфер обмена?
сбрасывает флаги ошибок.
Цитата Сообщение от Altair42 Посмотреть сообщение
продолжает цикл ока не будет введен энтер?
начинает извлекать символы из потока до тех пор, пока не извлечет символ '\n'
0
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 346
29.04.2014, 20:19  [ТС] #22
Croessmah, понятно. Спасибо!

Добавлено через 2 минуты
А как на счет вопроса на счет bitset?
0
Denis123456789
43 / 43 / 17
Регистрация: 02.06.2013
Сообщений: 181
29.04.2014, 21:04 #23
C++
1
2
3
4
if((num.size() % 2) != 0)
{std::cout << "Колличество эдлементов вектора не четное. Прошу добавит элемент в вектор для продолжение операции!\n";
if(std::cin >> n)
*num.push_back(n);}
Altair42, вот так попробуй
0
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 346
29.04.2014, 21:20  [ТС] #24
Denis123456789, Я так понял использовать итератор?

Попробую оба способа.
Я так понял alsav22 придложиль исправит ввод данных и не прервать цикл while принудительно и все будет норм.
Вы предложили написать программу используя итератор.
Попробую оба способа.

Если я что та не так понял, прошу прощение.

Добавлено через 2 минуты
А как использовать вне цикла переменные, которые инициализированы в цикле. (вопрос 1)
0
Denis123456789
43 / 43 / 17
Регистрация: 02.06.2013
Сообщений: 181
29.04.2014, 21:24 #25
Altair42, нет, я просто предположил почему программа не заходит в эту часть кода:
C++
1
2
3
{std::cout << "Колличество эдлементов вектора не четное. Прошу добавит элемент в вектор для продолжение операции!\n";
if(std::cin >> n)
*num.push_back(n);}
0
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 346
29.04.2014, 21:28  [ТС] #26
Denis123456789, тогда я не понял что означает *num?
0
Denis123456789
43 / 43 / 17
Регистрация: 02.06.2013
Сообщений: 181
29.04.2014, 21:33 #27
опечатался, вот так имел ввиду
C++
1
2
3
4
if((num.size() % 2) != 0)
{std::cout << "Колличество эдлементов вектора не четное. Прошу добавит элемент в вектор для продолжение операции!\n";
if(std::cin >> n)
num.push_back(n);}
0
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 346
29.04.2014, 21:40  [ТС] #28
Error. Operand of "*" must be a pointer.

Добавлено через 5 минут
Denis123456789, друг я что та не понял. Это же мой код без изменений Только 4-ю строку потащил немного в перед. В чем прикол ?
0
Denis123456789
43 / 43 / 17
Регистрация: 02.06.2013
Сообщений: 181
29.04.2014, 21:47 #29
у меня
C++
1
num.size() % 2
заключено в скобки, что дает нам следующий порядок действий:
мы сначала считаем выражение num.size() % 2, а потом проверяем его на неравенство нулю.
0
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 346
30.04.2014, 18:27  [ТС] #30
Denis123456789, я испаил скобки. пасибо!

Добавлено через 2 минуты
alsav22, друг мой я добаил ваш код в мою программу. Резльтат не удовлетверительный. Все ровно е входит из цикла ели е ввести ложный символ.
Вот код.
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
#include <iostream>
#include <conio.h>
#include <string>
#include <vector>
using std::vector;
 
int main()
{ setlocale (LC_ALL , "Russian");
int n;
vector<int> num;
 
std::cout << "Введите несколько чисел" << std::endl;
while(std::cin >> n)
    num.push_back(n);
std::cin.clear();
while (std::cin.get() != '\n');
if(num.size() % 2 != 0)
{std::cout << "Колличество эдлементов вектора не четное. Прошу добавит элемент в вектор для продолжение операции!\n";
if(std::cin >> n)
    num.push_back(n);}
for(vector<int>::size_type i = 0; i != num.size(); i++)
    std::cout << num[i]  + num [i+1, i <= num.size()] <<std::endl;
int x = num.size();
for(vector<int>::size_type i = 0; i != num.size(); i++)
{   x = x - 1;
x >= 0;
    
    std::cout << "Сумма " << num[i] <<  " + " << num[x] << " = " << num[i] + num[x] << std::endl;}
    _getch ();
    return 0;
 
}
Добавлено через 2 минуты
Как использовать данные из первого цикла вне цикла. Пришлось обработать все на одном цикле при выводе получается полный хаос.
Код на первом посте.
0
30.04.2014, 18:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.04.2014, 18:27
Привет! Вот еще темы с ответами:

как объявить правильно 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, как его применять в классах, если можно небольшой пример.


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

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

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