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

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

12.12.2018, 02:57. Показов 6363. Ответов 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
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru