Ver Mensaje Individual
  #2 (permalink)  
Antiguo 11/04/2015, 11:13
Avatar de vangodp
vangodp
 
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 11 años, 3 meses
Puntos: 38
Respuesta: duda con getline()

pon cin.sync(); después de leer cin>>c; antes de la segunda lectura.

Eso pasa por que al pulsar enter, el mismo enter en si es un carácter, pero no un carácter normal, si no que el que se ocupa del salto de linea.

Como esperas 2 cosas que son un char y un string ahi los tienes. Cuando tecleas 'A' y pulsas '\n' tienes 2 por el precio de 1. XDDD

Lo que pasa es que 'A' se mete en el char y '\n' se mete en el string¡vualá! tu programa echo misto. XDD

Así de perra es la vida pero bueno....

El carácter enter es un carácter no imprimible pero hay signos de que está ahí. Por ejemplo se ve que imprimes primero el string y después el char, pero si haces el inverso verás sin razón aparente que hay un salto de linea entre ambos.

lo mismo pasa si intentas leer 2 chars. El primer recibe el char y el segundo recibe el enter.

Te lo voy a demostrar XDDD


//compile eso
Código C++:
Ver original
  1. char c1;
  2. char c2;
  3. cout << "Imprima el char 1:";
  4. cin>>c1;
  5. cout << "Imprima el char 2:";
  6. cin>>c2;
  7. cout << c1 << endl;
  8. cout << int (c2) << endl; //aquí veras un numero que corresponde al carácter '\n' que en valor decimal según la tabla asc2 es 10 creo XDD.
...Puede buscar aquí: http://www.elcodigoascii.com.ar/

El 10 es nueva linea, no se imprime solo salta de linea, como ves es un char. =(

cin.sync() sincroniza correctamente lo escrito con el string. Llámalo siempre antes de leer chars y strings ;)

Busque como limpiar el buffer en C++ ya te dará el dolor de cabeza de los novatos. El mismo que tuve yo vamos. XD