Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/21: Рейтинг темы: голосов - 21, средняя оценка - 4.67
11 / 11 / 2
Регистрация: 13.07.2014
Сообщений: 420

При повторных итерация цикла, функция getline не работает

22.01.2015, 13:09. Показов 4657. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Подскажите пожалуйста. Цель данного куска кода - ввод названия (артикула) товара. До getline я использовал простой cin, но так как иногда в название товара может быть несколько слов и пробелы - я стал использовать getline, а затем удалять пробелы из получившегося. Но с getline другая проблема, первая итерация работает идеально, ввод в переменную вводится как надо, пробелы потом убираются. Но начиная со 2-ой итерации почему-то getline пропускается и сразу попадаю на ввод количества товара. Почему так может быть?
Надеюсь не очень путано рассказал.


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 while (true){
        finalit = 0;
        cout << "\nВведите нужный артикул: ";
        getline(cin, tmp_string); // Гетлайн не прерывает ввод при наличие пробела
        for(int i = 0; i < tmp_string.length(); i++) {
            if(tmp_string[i] == ' ') {
            tmp_string.erase(i,1);
            i--;
            }
        }
        cout << tmp_string;
        if (tmp_string == "завершить"){
            break;
        }
        Mebel tmp_mebel = SD(tmp_string);
        //cout << endl << tmp_mebel.name << " " << tmp_mebel.price << " " << tmp_mebel.massa;
        cout << "\nВведите количество: ";
        cin >> tmp_quantity;
        cout << endl;
        finalitFinal  = ( finalitFinal) + tmp_mebel.price * tmp_quantity;
        finalit =  (finalit + tmp_mebel.price) * tmp_quantity;
        cout << "Сумма: " << finalit << "\t\tФинальная сумма: " << finalitFinal <<"\n=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\n";
    }
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.01.2015, 13:09
Ответы с готовыми решениями:

В цикле for происходит только одна итерация при наличии вложенного цикла
не подскажите, нужно перебрать варианты перемножения переменных, в php и python у меня подобные циклы срабатывают, а в javascript почему-то...

Не работает функция getline();
Помогите, после ввода в переменную int c не выполняется функция getline, программа ее просто пропускает. #include &lt;iostream&gt; ...

Не работает функция getline !
Здравствуйте, помогите, если можете. Не корректно работает функция getline ! Я облазил google, нашел много похожих постов, но...

3
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
22.01.2015, 13:13
Лучший ответ Сообщение было отмечено Masai как решение

Решение

После 18-й строки вставь cin.get().
C++
1
2
cin >> tmp_quantity;
cin.get();
1
11 / 11 / 2
Регистрация: 13.07.2014
Сообщений: 420
22.01.2015, 13:28  [ТС]
Ой спасибо, от души! Как легко оказывается

Добавлено через 13 минут
Единственное, что печалит и в том сугубо моя проблема - не осознал пока логику получившегося "волшебства", т.е всё работает, а почему пока не допёр. Ощущение, что cin.get работает на getline. Я гуглю про эти функции. Но почему именно в данной ситуации так всё благополучно разрешилось вставкой этой - не совсем понял. И почему именно после ввода tmp_quantity; надо было это сделать. Извиняюсь за непонятливость, но осознать мне крайне важно...
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
22.01.2015, 13:36
Экстрактор числа берёт из потока только цифры, а символ '\n' не трогает, для getline() же это указатель на конец строки. Т. е. интерпретируется как пустая строка.

Добавлено через 1 минуту
Поэтому конец строки нужно извлечь, чтобы не мешал.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.01.2015, 13:36
Помогаю со студенческими работами здесь

Не работает функция getline
что надо сделать что бы заработала функция getline Добавлено через 56 минут Помогите

Как сделать так, чтобы при каждом клике происходила одна итерация цикла?
Надо, чтобы при каждом нажатии на лейбл происходила итерация цикла: public void label1_Click(object sender, EventArgs e) { ...

Почему не работает функция getline ()?
Может что-то нужно дописывать? #include &lt;iostream&gt; using namespace std; int main() {

Почему getline не считывает строку при первом проходе цикла?
В данной функции: void ArrayStr::InputArr(void) { cout &lt;&lt; &quot;Введите строки длинной не более &quot; &lt;&lt; range &lt;&lt; &quot;...

Итерация из цикла for в $().each
есть 2 цикла, один в другом: for (var i=0; i &lt; results.address_components.length; i++) { for (var b=0; b &lt;...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! в-строка - входное арифметическое выражение в инфиксной(обычной). . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru