Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/29: Рейтинг темы: голосов - 29, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 01.06.2015
Сообщений: 6

Объясните работу методов cin.getline и cin.ignore

12.12.2018, 02:57. Показов 6441. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Фрагмент программы ниже. Что делают cin.getline и cin.ignore (12-13 строки)
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
void WorkWithBooks(int Books)
{
    if (Books > 0)
    {
        A_Lot_Of_Books = new Book[Books];
        char* name = new char[30];
        for (int i = 0; i < Books; i++)
        {
            double price = 0.0;
            short int pictures;
            cout << "\nВведите название книги" << endl;
 cin.ignore(1);
            cin.getline(name, 30);
            A_Lot_Of_Books[i].SetName(name);
            cout << "\nВведите цену книги" << endl;
            cin >> price;
            A_Lot_Of_Books[i].SetPrice(price);
            cout << "\nЕсли в книге есть картинки введите значение больше 0. Если нету, то 0.\n" << endl;
            cin >> pictures;
            if (pictures > 0) A_Lot_Of_Books[i].SetPictures(true);
            system("cls");
            A_Lot_Of_Books[i].DisplayName();
            cout << " успешно внесено в базу";
        }
Добавлено через 8 минут
Фрагмент из файла объекта
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
Book::Book(const char * name, double price, bool pictures)
{
    if (name)
    {
        int nomer = 0;
        while (name[nomer] != '\0') nomer++;
        NameLength = nomer;
        for (int i = 0; i < nomer; i++) Name[i] = name[i];
    }
    else NameLength = 0;
    if (price >= 0) Price = price;
    else std::cout << "\nЦена не может быть отрицательной. Установлено 0 по-умолчанию";
    Pictures = pictures;
}
 
void Book::SetName(const char * name)
{
    if (name)
    {
        int nomer = 0;
        while (name[nomer] != '\0') nomer++;
        NameLength = nomer;
        for (int i = 0; i < nomer; i++) Name[i] = name[i];
    }
    else NameLength = 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.12.2018, 02:57
Ответы с готовыми решениями:

Метод getline(cin, m) не срабатывает без cin.ignore() / Ревью кода
Почему в моем случае getline(cin, m) не срабатывает без cin.ignore() ? Если по коду есть какие-нибудь замечания, то просьба написать что не...

Как работает cin.peek, cin,get, cin.ignore, cin.clear?
Здравствуйте, товарищи и не товарищи!:) Я только начал изучать C++, а уже использую вещи, которые мне не понятны, и прошу объяснить, как...

cin.getline и cin.ignore
Есть кусок кода в котором не могу разобраться. Если cin.ignore() есть, то теряется первый вводимый символ начиная со второго входа в for....

1
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
12.12.2018, 03:10
Лучший ответ Сообщение было отмечено Maxus3 как решение

Решение

Пользователь вводит какую ни будь фигню и нажимает enter.
В cin попадает "какая-то фигня" и символ конца строки.
cin>> читает какую-то фигню, но не трогает символ конца строки.
ignore(1) читает и отбрасывает один символ. Предположительно, этот самый конец строки.
getline читает текст до символа конца строки включительно.

Ну а по хорошему вместо ignore(1) надо бы делать:
C++
1
2
if(cin.peek()=='\n')
    cin.get();
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.12.2018, 03:10
Помогаю со студенческими работами здесь

Друзья getline и cin.ignore
Постараюсь как можно более точно обрисовать проблему. Имеется string * v1 = new string; string * v2 = new string; string * v3 = new...

Не работает getline(cin,s), istream.ignore()
Использую microsoft visual c++ 6.0. не работает: string s; getline(cin,s);//дважды приходиться жать ентер При использовании...

Объясните пожалуйста как работают cin.good(), cin.sync(), cin.clear()
Такая проблема: сдаю в вуза лабораторные по программированию, писал все сам, до этого c++ не изучал, поэтому возникали некоторые проблемы....

Для чего в код вводится cin.ignore после того, как cin>> уже сработало?
Доброго времени суток! Просматриваю простой код. Вводится строка типа string: фунты и дюймы Затем значения переводится в типы int и...

Проблема с cin.ignore() и cin.clear()
Есть проблема. Добавлено через 11 минут // ConsoleApplication6.cpp: определяет точку входа для консольного приложения. // ...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера 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