Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: vikour92 en 23 Mayo 2012, 19:24 pm



Título: cin.getline problemas en C++
Publicado por: vikour92 en 23 Mayo 2012, 19:24 pm
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
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. class phone {
  6.   friend istream &operator>> (istream &input, phone &num);
  7.   friend ostream &operator<< (ostream &output, phone &num);
  8. private:
  9.   char areaCode[4];
  10.   char exchange[4];
  11.   char line[5];
  12. };
  13.  
  14. ostream &operator<< (ostream &output, phone &num)
  15. {
  16.   output << "(" << num.areaCode << ") " << num.exchange << "-"
  17.             << num.line << endl;
  18. }
  19.  
  20. istream &operator>> (istream &input, phone &num)
  21. {
  22.   input.ignore();                                  // Ignora el (
  23.   input.getline(num.areaCode, 4);        // Lee el número.
  24.   input.ignore(2);                                // Ignora el ") "
  25.   input.getline(num.exchange, 4);        // Lee el número.
  26.   input.ignore();                                  // Ignora el "-"
  27.   input.ignore(num.line, 5);                  // Lee el último número.
  28.  
  29.   return input;
  30. }
  31.  
  32. int main()
  33. {
  34.   phone test;
  35.  
  36.   cout << "Insert your phone \n";
  37.   cin >> test;
  38.   cout << "Your phone is : " << test << end;
  39.  
  40.   return 0;
  41. }
  42.  

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.