Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
9 / 9 / 0
Регистрация: 22.12.2017
Сообщений: 295
1

Пропуск ввода в цикле

01.01.2020, 18:45. Показов 2120. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Приветствую всех. Помогите найти ошибку, цикл должен принимать строку и заносить ее в ассоциативный массив. Все работает кроме одного: если необходимо ввести три строки с консоли, то вводятся только две.
Код:
C++
1
2
3
4
5
6
7
8
9
10
11
for (std::vector<ssub_match>::iterator it = neterminalsymb.begin(); it != neterminalsymb.end(); ++it)
    {
        vector <string> vct;
        vct.clear();
        string str = "";
        cout << "Введите правила для нетерминального символа " << *it << ":" << endl;
        getline(cin, str);
        regex rgx{ "[-[:alpha:]\\d]+" };
        copy(sregex_token_iterator{ str.begin(), str.end(), rgx }, {}, back_inserter(vct));
        mp.emplace(*it, vct); 
    }
Скрин:
Миниатюры
Пропуск ввода в цикле   Пропуск ввода в цикле  
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.01.2020, 18:45
Ответы с готовыми решениями:

Пропуск шага в цикле
Есть цикл for, нужно посчитать сумму всех шагов кроме i0(Первый),i2(третий),in-1(предпоследний)....

Пропуск ввода переменной
Приветствую! Задача такова: при объявлении переменных мы уже задаём им значения (они необходимы...

Пропуск ввода строки
Функция: cout &lt;&lt; &quot;Введите логин:&quot;; string Login; getline(cin, Login); cout &lt;&lt; &quot;Введите...

Пропуск ввода данных в переменную
//--------------------------------------------------------------------------- #include &lt;vcl.h&gt;...

3
Мозгоправ
1745 / 1039 / 468
Регистрация: 01.10.2018
Сообщений: 2,138
Записей в блоге: 2
01.01.2020, 20:38 2
Encrypted1010, покажите как вы вводите предыдущие данные.
0
9 / 9 / 0
Регистрация: 22.12.2017
Сообщений: 295
01.01.2020, 20:44  [ТС] 3
L0M,
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <iostream>
#include <conio.h>
#include <regex>
#include <iterator>
#include <string>
#include <vector>
#include <map>
 
using namespace std;
 
//Глобальные переменные
map <string, vector<string>> mp;
 
 
void input()
{
    vector<ssub_match> neterminalsymb;
    vector<ssub_match> terminalsymb;
    string neterminal_symb;
    string terminal_symb;
    cout << "Введите нетерминальные символы грамматики, разделенные запятой:";
    cin >> neterminal_symb;
    cout << "Введите терминальные символы грамматики, разделенные запятой:";
    cin >> terminal_symb;
    regex rgx{ "[-[:alpha:]\\d]+" };
    copy(sregex_token_iterator{ neterminal_symb.begin(), neterminal_symb.end(), rgx }, {}, back_inserter(neterminalsymb));
    copy(sregex_token_iterator{ terminal_symb.begin(), terminal_symb.end(), rgx }, {}, back_inserter(terminalsymb));
    for (std::vector<ssub_match>::iterator it = neterminalsymb.begin(); it != neterminalsymb.end(); ++it)
    {
        vector <string> vct;
        vct.clear();
        string str = "";
        cout << "Введите правила для нетерминального символа " << *it << ":" << endl;
        getline(cin, str);
        regex rgx{ "[-[:alpha:]\\d]+" };
        copy(sregex_token_iterator{ str.begin(), str.end(), rgx }, {}, back_inserter(vct));
        mp.emplace(*it, vct); 
    }
    for (const auto &el : mp) {
        cout << el.first << " -> ";
        for (const auto& s : el.second) {
            cout << s << (&s == &el.second.back() ? " " : " | ");
        }
        cout << endl;
    }
}
 
int main()
{
    setlocale(LC_ALL, "Russian");
    cout << "Введите исходные данные" << endl;
    input();
    _getch();
    return 0;
}
0
Мозгоправ
1745 / 1039 / 468
Регистрация: 01.10.2018
Сообщений: 2,138
Записей в блоге: 2
01.01.2020, 23:42 4
Лучший ответ Сообщение было отмечено Encrypted1010 как решение

Решение

Encrypted1010, либо после строки 24 поставьте cin.ignore();, который уберёт из входного потока символ конца строки, либо в строках 22 и 24 пользуйтесь getline(cin, ...).
1
01.01.2020, 23:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.01.2020, 23:42
Помогаю со студенческими работами здесь

cin.getline пропуск ввода
Стыдно 3 раз за сегодня обращаться по мелким проблемам, но увы, гугл не помогает. Сама проблема...

"Неожиданный" пропуск ввода при заполнении пользователем полей в массиве объектов типа "Student"
Здравствуйте. Решил создать небольшой класс &quot;Студент&quot; с массивом объектов. При первом прохождении...

Остановка ввода типа string в цикле
Здравствуйте. Хочу задать вопрос: как остановить ввод в цикле типа string данным способом. Если...

Пропуск нескольких итераций в цикле for
Добрый день! Как пропустить несколько итераций подряд в цикле for ? Например, в языке Си это...


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

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