elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Tutorial básico de Quickjs


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  duda con cin.ignore()
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: duda con cin.ignore()  (Leído 2,764 veces)
Mientras

Desconectado Desconectado

Mensajes: 19


Ver Perfil
duda con cin.ignore()
« en: 22 Agosto 2015, 05:20 am »

Hola a todos. Estoy aprendiendo c++(poo) y encontré un ejemplo que me generó una duda una duda. La linea que dice cin.ignore pensé que era innecesario ponerla ya que al iniciar el programa no se llenaría de "basura" pero luego pensé que si es necesario en caso llamemos varias veces al método. Entonces cuando ejecuto no me muestra directamente "Ingrese nombre de impuesto" si no que primero me espera a que presione enter. Como evito eso?

Este es el código.


Código
  1. #include <iostream>
  2. using namespace std;
  3. class impuesto
  4. {
  5. public:
  6.    // Funciones miembro
  7.    void capturar();
  8.    double calcularImpuesto(double);
  9.    void imprimir(double);
  10.    // Datos miembro
  11.    char nombre [25];
  12.    double tasa;
  13. };
  14. int main(){
  15.  
  16.    impuesto ISV;
  17.    double valor;
  18.  
  19.    ISV.capturar();
  20.    cout << "Valor: ";
  21.    cin >> valor;
  22.  
  23.    ISV.imprimir(valor);
  24.  
  25.    return 0;
  26. }
  27.  
  28. void impuesto::capturar()
  29. {
  30.    cin.ignore();
  31.    cout << "Nombre de impuesto: ";
  32.    cin.getline(nombre, 25);
  33.    cout << "Tasa: ";
  34.    cin >> tasa;
  35. }
  36. void impuesto::imprimir(double v)
  37. {
  38.    cout << "Para un valor de : " << v << " y una tasa de: " << tasa
  39.    << " el valor de " << nombre << " es: " << calcularImpuesto(v) << endl;
  40. }
  41. double impuesto::calcularImpuesto(double v)
  42. {
  43.    return v * tasa;
  44. }
  45.  


En línea

user-marcos

Desconectado Desconectado

Mensajes: 159


Ver Perfil
Re: duda con cin.ignore()
« Respuesta #1 en: 22 Agosto 2015, 12:40 pm »

Puedes usar algo así:

Código
  1. private static bool inicio;
  2. bool impuesto:: inicio = true;
  3.  
  4. //....
  5.  
  6. if(inicio == true)
  7. inicio = false;
  8. else cin.ignore();
  9.  


En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: duda con cin.ignore()
« Respuesta #2 en: 22 Agosto 2015, 13:40 pm »

Lo mejor que puedes hacer es no combinar el operador "<<" con "getline".
Utilizar siempre getline es la mejor solución.
En línea

Mientras

Desconectado Desconectado

Mensajes: 19


Ver Perfil
Re: duda con cin.ignore()
« Respuesta #3 en: 24 Agosto 2015, 05:02 am »

1. Hola, gracias por responder, quisiera saber otras formas?

2. Puedes ser más específico con lo de getline...
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: duda con cin.ignore()
« Respuesta #4 en: 24 Agosto 2015, 13:25 pm »

El problema de "cin<<", es que deja saltos de linea en el buffer de entrada sin leer. Cuando tratas de usar getline, coge esos saltos de linea, y no te deja meter datos. Con "cin.ignore()", eliminas esos saltos de linea.

Para leer en consola, te recomiendo usar siempre, salvo casos especiales:
Código
  1. string line;
  2. getline(cin, line);

De ese modo, siempre obtendrás una cadena, y el buffer será limpiado correctamente.

Ahora bien, en caso por ejemplo, de que quieras interpretar la cadena como un entero, tienes las funciones:
Código
  1. int i = stoi(line); // String to int
  2. unsigned long ul = stoul(line); // String to int
  3. long long ll = stoll(line); // String to long long
  4. float f = stof(line); // String to float
  5. double d = stod(line); // String to double
  6. long double ld = stod(line); // String to long double

Son de la librería <string>. Aquí puedes verlas todas: http://www.cplusplus.com/reference/string/

De este modo, utilizas siempre getline, y evitas utilizar cin<< y cin.ignore.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
PROBLEMA con la funcion miembro getline() e ignore()
Programación C/C++
.:BlackCoder:. 9 7,427 Último mensaje 27 Julio 2010, 04:29 am
por leogtz
[Solucionado]entrar datos con getline utilizar ignore
Programación C/C++
tonilogar 7 5,674 Último mensaje 26 Mayo 2011, 11:02 am
por tonilogar
cin.getline y cin.ignore
Programación C/C++
ricardo2013 6 4,557 Último mensaje 25 Octubre 2012, 17:01 pm
por rir3760
Como usar cin.ignore()
Programación C/C++
Lotux5 2 11,264 Último mensaje 12 Mayo 2013, 18:46 pm
por rir3760
“Ignore no more”, o cómo obligar a tu hijo a que te llame por teléfono
Noticias
wolfbcn 3 2,034 Último mensaje 17 Agosto 2014, 23:47 pm
por Pitufete
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines