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

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

12.12.2018, 02:57. Просмотров 3179. Ответов 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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
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() есть, то теряется первый вводимый...

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

1
2688 / 1859 / 552
Регистрация: 05.06.2014
Сообщений: 5,377
12.12.2018, 03:10 2
Лучший ответ Сообщение было отмечено Maxus3 как решение

Решение

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

Ну а по хорошему вместо ignore(1) надо бы делать:
C++
1
2
if(cin.peek()=='\n')
    cin.get();
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.12.2018, 03:10

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Не работает 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: фунты и дюймы Затем...

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.