Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> использование cin.getline и cin.ignore 
:(
    Опции темы
yngwie19
Дата 2.4.2010, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



здравствуйте вот пример из книги Дейтела "Как программировать на С++"
Код

#include "stdafx.h"
#include <iostream>

using namespace std;

class PhoneNumber
{
    friend ostream& operator<<(ostream&, const PhoneNumber&);
    friend istream& operator>>(istream&, PhoneNumber&);

    private:
        char areaCode[4];
        char exchange[4];
        char line[5];
};

int _tmain(int argc, _TCHAR* argv[])
{
    PhoneNumber num;

    cout<<"Enter you phonenumber as (123) 456-7890\n";
    cin>>num;

    cout<<num<<endl;
   

    return 0;
}

ostream& operator<<(ostream& out, const PhoneNumber& num)
{
    out<<"Your enter number is: "
        <<"("<<num.areaCode<<") "
        <<num.exchange<<" - "
        <<num.line<<endl;

    return out;
}
istream& operator>>(istream& in, PhoneNumber& num)
{
    in.ignore();
    in.getline(num.areaCode,4);
    in.ignore();
    in.getline(num.exchange,5);
    in.ignore();
    in.getline(num.line,5);

    return in;
}

однако есть проблемы при считывании номера телефона в этом участке кода:
Код

istream& operator>>(istream& in, PhoneNumber& num)
{
    in.ignore();
    in.getline(num.areaCode,4);
    in.ignore();
    in.getline(num.exchange,5);
    in.ignore();
    in.getline(num.line,5);

    return in;
}

объясните мне пожалуйста как работает функция cin.ignore() и cin.getline(), не очень понимаю почему не получается корректно считать введенную стоку
PM MAIL   Вверх
toxx
Дата 2.4.2010, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 653
Регистрация: 4.3.2009
Где: НН

Репутация: 4
Всего: 13



getline(buff,max)  буффер ввода и макс число символов, при этом удаляет из буфера символ разрыва строки поэтому ввод до первого пробела.
ignore(n,'\n') число пропускаемых символов и символ разделения т.е. проскает n символов, если ранее не будет найден '\n', далее если '\n' введен раньше n то будет удален из буфера и ignore() завершит работу.
PM MAIL   Вверх
mes
Дата 2.4.2010, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250





--------------------
PM MAIL WWW   Вверх
yngwie19
Дата 3.4.2010, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



спасибо за ссылки, подскажите почему этот пример не работает ?
PM MAIL   Вверх
bsa
Дата 6.4.2010, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(yngwie19 @  3.4.2010,  10:19 Найти цитируемый пост)
спасибо за ссылки, подскажите почему этот пример не работает ? 
Документацию на getline() и ignore() прочитал? А теперь объясни, зачем нужен ignore() в данном примере?

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0444 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.