Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > использование cin.getline и cin.ignore


Автор: yngwie19 2.4.2010, 21:11
здравствуйте вот пример из книги Дейтела "Как программировать на С++"
Код

#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(), не очень понимаю почему не получается корректно считать введенную стоку

Автор: toxx 2.4.2010, 21:33
getline(buff,max)  буффер ввода и макс число символов, при этом удаляет из буфера символ разрыва строки поэтому ввод до первого пробела.
ignore(n,'\n') число пропускаемых символов и символ разделения т.е. проскает n символов, если ранее не будет найден '\n', далее если '\n' введен раньше n то будет удален из буфера и ignore() завершит работу.

Автор: mes 2.4.2010, 21:41
http://cplusplus.com/reference/iostream/istream/ignore/
http://cplusplus.com/reference/iostream/istream/getline/

Автор: yngwie19 3.4.2010, 10:19
спасибо за ссылки, подскажите почему этот пример не работает ?

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)