cin.getline problemas en C++

Iniciado por vikour92, 23 Mayo 2012, 19:24 PM

0 Miembros y 1 Visitante están viendo este tema.

vikour92

Buenos días a todos.

Tengo un problema con un ejercicio y no se por donde pillarlo. Trata sobre una clase de teléfonos y tengo que hacer la homonimia de operadores para introducir telefonos desde cout y cin.

El formato de entrada seria por ejemplo -->  (800) 555-1212
El programa debería de imprimirlo así.

El código es el siguiente:

Código (cpp) [Seleccionar]

#include <iostream>

using namespace std;

class phone {
   friend istream &operator>> (istream &input, phone &num);
   friend ostream &operator<< (ostream &output, phone &num);
private:
   char areaCode[4];
   char exchange[4];
   char line[5];
};

ostream &operator<< (ostream &output, phone &num)
{
   output << "(" << num.areaCode << ") " << num.exchange << "-"
             << num.line << endl;
}

istream &operator>> (istream &input, phone &num)
{
   input.ignore();                                  // Ignora el (
   input.getline(num.areaCode, 4);        // Lee el número.
   input.ignore(2);                                // Ignora el ") "
   input.getline(num.exchange, 4);        // Lee el número.
   input.ignore();                                  // Ignora el "-"
   input.ignore(num.line, 5);                  // Lee el último número.

   return input;
}

int main()
{
   phone test;

   cout << "Insert your phone \n";
   cin >> test;
   cout << "Your phone is : " << test << end;

   return 0;
}


Bien, el problema que tengo es que sale de la siguiente forma:
(salida del programa)
------------------------------------------------------------------------
Insert your phone
(800) 555-1212
Your phone is : (800)  -
------------------------------------------------------------------------

Lo he depurado con gdb y es como si no leyera con getline. He estado mirando cosas por ahí como hacer antes un ignore por si hubiera algún carácter de terminación o hacer clean(). Pero nada ...

A ver si me pudieran ayudar por favor.

Gracias por la atención.