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

Массив и вектор

16.05.2014, 15:46. Показов 525. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Не могу понят почему не работает данный код. Точнее оно работало правильно. Но перестал работать. Ввел малозначительные изменение перестал работать. Убрал все изменение не работает.

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
#include <iostream>
#include <conio.h>
#include <vector>
using std::vector;
int main()
{
    setlocale (LC_ALL, "Russian");
    vector<int> num;
    std::cout << " Введите несколько чисел : "  <<std::endl;
    int a;
    char s;
    while (std::cin >> a)
     {   num.push_back(a);
    if(std::cin.get() == '\n')
    {
    int *ar = new int [num.size()];
     for(vector<int>::iterator iter = num.begin(); iter != num.end(); iter++)
     {for(int *q = ar; q != ar + num.size(); q++)
     *ar = *iter;
     std::cout << "Символ массива " << *ar << std::endl;}
     delete [] ar;}
    }
        _getch();
            return 0;
    }
При введение цифр и нажатие энтер выводил след сообщение:
Символ массива ...
Но теперь тот же самый код не чего не делает после нажатие энтер.

Добавлено через 5 минут
В другой теме по другому вопросу посоветовали использовать

C++
1
2
3
....
cin.clear();
while(cin.get() != '\n')
Я не знаю как использовать эту функцию копировать и вставит не получается, не работает код.
А в данной программе оно отменяет инициализацию массива. Не знаю почему но при введение данного кода выдает ошибку типа *ar не инициализирован.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.05.2014, 15:46
Ответы с готовыми решениями:

Умножить одномерный массив (вектор-строка) на главную диагональ (вектор столбец)
Помогите исправить ошибки в коде, пожалуйста. Задание: задать матрицу 3х3 с помощью указателей,...

Задан вектор X[20]. Положительные числа переписать в массив Y, а отрицательные в массив W
Всем привет=) Помогите оформить правильно, фот наработка: for(int i = 0, j = 0, c = 0; i &lt; 20;...

Задан вектор X[20]. Положительные числа переписать в массив Y, а отрицательные в массив W
Помогите с задачками 1.Задан вектор X. Положительные числа переписать в массив Y, а...

Класс "вектор" с конструкторами, позволяющими создать нулевой вектор и вектор с произвольным числом элементов
Привет! Задача следующая. Нужно реализовать класс &quot;вектор&quot; с конструкторами, которые позволяют...

10
32 / 32 / 19
Регистрация: 13.07.2011
Сообщений: 140
16.05.2014, 15:50 2
Проверил на Visual Sudio - все работает. Попробуйте перезапустить проект
И еще, зачем еще один цикл вот здесь:
C++
1
2
3
4
5
     for(vector<int>::iterator iter = num.begin(); iter != num.end(); iter++)
    {for(int *q = ar; q != ar + num.size(); q++)
     *ar = *iter;
     std::cout << "Символ массива " << *ar << std::endl;}
     delete [] ar;}
Можно сделать проще:
C++
1
2
 for(vector<int>::iterator iter = num.begin(); iter != num.end(); iter++)
     std::cout << "Символ массива " << *iter << std::endl;
0
0 / 3 / 0
Регистрация: 28.06.2013
Сообщений: 359
16.05.2014, 16:01  [ТС] 3
Воторой цикл копирует элементы вектора в массив. По крайней мере я так думаю.

1 цикл читает элементы вектора, второй цикл копирует элементы вектора в массив.

Добавлено через 2 минуты
Я как бы там ввел динамический, пустой массив. С размером вектора.
C++
1
int *ar = new int [num.size()];
Добавлено через 1 минуту
RamonN, перезапустил проект несколько раз. Не работает. Пользуюсь VS 2012
0
32 / 32 / 19
Регистрация: 13.07.2011
Сообщений: 140
16.05.2014, 16:02 4
Altair42, А для чего? в него просто копируются значения вектора и выводятся в поток. Ненужная операция, заменяемая одной строчкой
C++
1
std::cout << *iter << std::endl;
Попробуйте пройтись отладчиком и посмотрите, где у вас программа зависает.
0
0 / 3 / 0
Регистрация: 28.06.2013
Сообщений: 359
16.05.2014, 16:40  [ТС] 5
RamonN, я знаю что не нужная. Цель использовать знание а не написать просто набор символов. Копирование с вектора на макрос может понадобится в реальной программе. Это задача с книги. Я не программирую я только учусь. И такие супер тупые коды один из способов использовать знание.

Добавлено через 11 минут
RamonN,
Цитата Сообщение от RamonN Посмотреть сообщение
Попробуйте пройтись отладчиком и посмотрите, где у вас программа зависает.
Все я нашел проблему. Я не знаю как вы проверили и как у вас заработало, но код не должен был работать. Символ '\n' не был объявлен.

Правильный код
C++
1
2
3
4
5
6
....int a;
    char s='\n';
    while (std::cin >> a)
     {   num.push_back(a);
    if(std::cin.get() == '\n')
    {.....
Но возникает вопрос. Почему не выдал ошибку про не объявленную переменную, при запуске программы.
0
224 / 224 / 38
Регистрация: 17.12.2010
Сообщений: 713
16.05.2014, 16:45 6
Altair42, может на не инициализированную?
на них выдаются предупреждения
0
0 / 3 / 0
Регистрация: 28.06.2013
Сообщений: 359
16.05.2014, 16:55  [ТС] 7
Aloir, спасибо что заметили Но я думал что '\n' в первом коде не объявлен.

Обычно при таком коде программа ругается что b использован без инициализации.
C++
1
2
3
int a;
char b;
while(cin >> a, a != b)
При таком коде ругается компилятор что с не объявлен.
C++
1
2
3
int a;
char b;
while(cin >> a, a != с)
Но почему то на не объявленный, не инициализированный символ новой строки не кто не ругается. И этот символ не работает без объявление.
0
32 / 32 / 19
Регистрация: 13.07.2011
Сообщений: 140
16.05.2014, 18:26 8
Цитата Сообщение от Altair42 Посмотреть сообщение
RamonN, я знаю что не нужная. Цель использовать знание а не написать просто набор символов. Копирование с вектора на макрос может понадобится в реальной программе. Это задача с книги. Я не программирую я только учусь. И такие супер тупые коды один из способов использовать знание.

Добавлено через 11 минут
RamonN,
Все я нашел проблему. Я не знаю как вы проверили и как у вас заработало, но код не должен был работать. Символ '\n' не был объявлен.

Правильный код
C++
1
2
3
4
5
6
....int a;
    char s='\n';
    while (std::cin >> a)
     {   num.push_back(a);
    if(std::cin.get() == '\n')
    {.....
Но возникает вопрос. Почему не выдал ошибку про не объявленную переменную, при запуске программы.
А он и не должен ругаться, вы переменную s нигде не используете далее, так что ошибка не обоснована. Переменная может быть не инициализирована сколько угодно, пока вы не начнете ее использовать. Символ '\n' не надо нигде инициализировать, это один из управляющих символов, заранее определенных в системе.
0
0 / 3 / 0
Регистрация: 28.06.2013
Сообщений: 359
16.05.2014, 18:36  [ТС] 9
RamonN, я не про s а про '\n'. Которого раньше не объявил. Если использовать любой символ без объявление компилятор будет ругаться. Но символ новой строки можно использовать сколько угодно без объявление. Компилятор не будет ругаться но программа не будет работать. Как в моем случае. Я там использовал символ новой строки без объявление программа не работало. Объявил символ новой строки программа стало работать. Вот и возник вопрос, почему компилятор не стал ругаться на не объявленный символ?
0
32 / 32 / 19
Регистрация: 13.07.2011
Сообщений: 140
16.05.2014, 18:42 10
Altair42, Потому что символ '\n' не нужно нигде объявлять, это управляющий символ, заранее объявленный в системе.
Почему же тогда у меня программа работает без нареканий, значит ошибка явно не в этом.
0
0 / 3 / 0
Регистрация: 28.06.2013
Сообщений: 359
17.05.2014, 09:31  [ТС] 11
RamonN, не знаю как объяснить. Пока не объявлял символ новой строки программа не видел его.
0
17.05.2014, 09:31
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.05.2014, 09:31
Помогаю со студенческими работами здесь

Массив и Вектор
Здравствуйте , господа! Нужна ваша помощь. Условие задачи : Записать в вектор H(n) строку матрицы...

Вектор и Массив
Уважаемые! Пошел на курсы учиться С++, но из за завала на работе пропустил много занятий и теперь...

Вектор как массив
Смешно конечно, но я именно массив (ну а точнее вектор создать не могу). Ошибка выскакивает только...

Одномерный массив (вектор)
1. За однократный просмотр массива найти его максимальный положительный элемент Xmax. 2. И...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru