Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] duda con getline()

Estas en el tema de duda con getline() en el foro de C/C++ en Foros del Web. hola poseo el siguiente programa, pero no me pide la cadena de caracteres solo el numero ¿porque?, creo que es el método getline() por eso ...
  #1 (permalink)  
Antiguo 11/04/2015, 08:47
 
Fecha de Ingreso: septiembre-2012
Ubicación: bogota
Mensajes: 9
Antigüedad: 11 años, 7 meses
Puntos: 0
duda con getline()

hola poseo el siguiente programa, pero no me pide la cadena de caracteres solo el numero ¿porque?, creo que es el método getline() por eso me gustaría que me explicara como funciona.



#include <iostream>
#include <string>

using namespace std;

int main()
{
int c;
cin>>c;
string s;

getline(cin,s);

cout<<s<<endl;
cout<<c<<endl;

return 0;
}
  #2 (permalink)  
Antiguo 11/04/2015, 11:13
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 7 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

Etiquetas: funcion, int, numero, programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:02.