[C con Clase] Ingreso de datos cin

Luis Gutierrez Gomez gutierrezgl en hotmail.com
Mar Nov 22 06:16:47 CET 2011



Hola a todos, y agradeciendo de antemano sus consejos.

Tengo el siguiente problema. Este programa lo que debe hacer es inicialmente solicitarme 10

nombres de personas y sus telefonos. Llenados esos datos, me mostrará un menú donde puede elegir:

a) saber el telefono de una persona ingresando su nombre.

b) saber el nombre de una persona ingresando su telefono. Y

c) salir del programa.

 

El programita aparentemente funcionaba bien, ya que para todas las pruebas, solo le ingresaba

un nombre solo ( sin apellido ) y su numero telefonico, de los diez datos que me pedia , bueno en realidad

lo probaba con tres datos. Bueno el hecho es que si funcionaba bien. Pero ya al final de las pruebas

lo quise probar con datos mas reales que ingresaba, que constaban de un nombre y apellido (separado ´por un tab(barra 

espaciadora) ), pero

al dar "enter", la aplicación se salta al siguiente "nombre", osea ya no me pide el telefono del primer dato ingresado.

Esto lo he observado que pasa cada vez que uso el "tab" separando nombre de apellido al ingresar el dato "nombre"; ya que cuando 

ingreso el mismo nombre y apellido corrido (sin "tab")el programa si me pide el telefono respectivo, osea ya

no se salta, y el programa funciona bien.

 

Aqui está el programa:

 

/*
 * mainCH_11_1.cpp
 *
 *  Created on: 19/11/2011
 *      Author: Lucho
 */

#include <cstdlib>
#include <iostream>
#include <cctype>
#include <ctime>

 

using namespace std;

 

const int NUM_PERSONAS = 3;
const int MAX_LETRAS = 65;
const int DIG_TELEFONO = 10;

 

typedef long time_t;

 

struct Persona {
 char Nombre[MAX_LETRAS];
 char Telefono[DIG_TELEFONO];
};

 

int main(){
 char opcion = 0;
 char NombreIngresado[MAX_LETRAS];
 char TelIngresado[DIG_TELEFONO];
 int count, i;
 bool bEncontrado;
 time_t t_Inicio = 0;
 Persona Plantilla[NUM_PERSONAS];

 

 for ( count = 0 ; count < NUM_PERSONAS ; count++){
 cout << "Ingrese " << count + 1 <<"°"<< " Nombre y Teléfono de persona ";
 cout << endl;
 cout << " Nombre : " ;
 cin >> Plantilla[count].Nombre;//***********Por aca aparece el problema indicado*********************************
 cin.get();
 cout << endl;
 cout << " Teléfono : ";
 cin >> Plantilla[count].Telefono;
 cin.get();
 cout << endl;
 system("cls");
 }

 

 cout << " Se Ingresaron todos los Datos " << endl;
 cin.get();
 system("cls");

 bool escape = false;

 

 do{
 cout << "  BUSCAR NOMBRE O NUMERO TELEFONICO DE " << NUM_PERSONAS <<" PERSONAS";
 cout << endl;
 cout << " a) Buscar por nombre " << endl;
 cout << " b) Buscar por numero de telefono " << endl;
 cout << " c) Salir " << endl;
 cout << endl;
 cout << " Pulsa una opción: " << endl;
 cin >> opcion;
 cin.get();

  switch ( opcion ){
   case 'a':
    cout << " Ingrese el nombre para saber su Numero Telefónico: ";
    cout << endl;
    cin >> NombreIngresado;
    bEncontrado = false;
    for ( count = 0 ; count < NUM_PERSONAS && !bEncontrado ; count++ ){
    bEncontrado = true;
    for ( i = 0 ; ( NombreIngresado [i] != '\0' ) && bEncontrado ; i++ )
    bEncontrado = tolower ( NombreIngresado [i] ) == tolower ( Plantilla[count].Nombre[i] );
    }
    if ( bEncontrado )
     cout << " El numero telefónico es: " << Plantilla[ count - 1].Telefono;
    else
     cout << " El nombre no esta registrado ";
    cout << endl;

    t_Inicio = time ( NULL );
    while ( difftime ( time ( NULL ) , t_Inicio ) < 10.0 );
    break;

   case 'b':
    cout << " Ingrese el número Telefónico para saber su Nombre: ";
    cout << endl;
    cin >> TelIngresado;
    bEncontrado = false;
    for ( count = 0 ; count < NUM_PERSONAS && !bEncontrado ; count++ ){
    bEncontrado = true;
    for ( i = 0 ; ( TelIngresado [i] != '\0' ) && bEncontrado ; i++ )
    bEncontrado = tolower ( TelIngresado [i] ) == tolower ( Plantilla[count].Telefono[i] );
    }
    if ( bEncontrado )
     cout << " El nombre de la Persona es: " << Plantilla[ count - 1].Nombre;
    else
     cout << " El nombre no esta registrado ";
    cout << endl;
    system("pause");
   break;
   case 'c':
    escape = true;
    break;
   default :
    break;
  }
  system("cls");
  }while ( !escape );
 system("cls");
 cout << "La Aplicación Finalizó " << endl;
 system("pause");
 return 0;
 }

 

Que debería hace para solucionar ese problema?

 

cordiales saludos

 

Luis 		 	   		  



Más información sobre la lista de distribución Cconclase