Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: CATBro en 8 Julio 2012, 04:16 am



Título: No entiendo la funcion del cin en este programa Arreglo de caracteres
Publicado por: CATBro en 8 Julio 2012, 04:16 am
Que onda! No entiendo para que poner ese cin ????

Código
  1. /*********************************
  2. *    Arreglos de caracteres      *
  3. *********************************/
  4.  
  5. #include <iostream>
  6. using std::cout;
  7. using std::endl;
  8. using std::cin;
  9.  
  10. int main()
  11. {
  12.        char cadena1[ 20 ]; // reserva 20 caracteres
  13.        char cadena2[] = "literal de cadena" ; // reserva 17 caracteres
  14.  
  15.        cout << "Escribe la cadena \"hola todos\" : ";
  16.        cin >> cadena1;
  17.  
  18.        cout << "cadena1 es: " << cadena1 << "\ncadena2 es: " << cadena2;  
  19.  
  20.        cout << "\ncadena1 con espacios entre caracteres es:\n";  
  21.  
  22.        for ( int i = 0; cadena1[ i ] != '\0'; i++ )
  23.        {
  24.                cout << cadena1[ i ] << " " ;
  25.        }// fin de for
  26.  
  27.        cin >> cadena1;  //<------------------------------------------------------------Esto de aqui no lo entiendo, no me deja introducir nada el programa se brinca a la siguiente linea e imprime el  //resto del arreglo de caracteres: todos
  28.        cout << "\ncadena1 es: " << cadena1 << endl;
  29.  
  30.        return 0;
  31.  
  32. }// fin de main
  33.  
  34.  

La salida del programa es la siguiente

Escriba la cadena "hola todos": hola todos
cadena1 es : hola
cadena2 es : literal de cadena
cadena1 con espacios entre caracteres es:
h o l a
cadena1: todos

El problema es donde señalo en el codigo el cin, al momento de llegar a esa parte no me deja introducir nada el programa , se brinca a la siguiente linea y en lugar de imprimir solamente "hola" imprime "todos"

Saludos


Título: Re: No entiendo la funcion del cin en este programa Arreglo de caracteres
Publicado por: durasno en 8 Julio 2012, 07:45 am
Hola! nose de donde sacaste el codigo pero esta bueno para entender como trabaja cin con el bufer del teclado... Cuando vos ingresas "hola todos", el primer cin lo unico que almacena en cadena1 es "hola" y esto se debe a que cin solo lee hasta encontrar un blanco(osea un espacio, tabulacion, salto de linea), en este caso leyo hasta encontrar el espacio. ¿¿Pero que pasa con "todos"??? esta porcion del string queda en el bufer del teclado... Luego el segundo cin lee del bufer la palabra "todos" sin dejarte ingresar nada


Saludos


Título: Re: No entiendo la funcion del cin en este programa Arreglo de caracteres
Publicado por: CATBro en 8 Julio 2012, 21:17 pm
El libro es C++ como programar sexta edicion de Deitel, voy en el capitulo 7 y nunca el autor menciona ese comportamiento del cin, una pregunta esa funcion del cin solo la puedo observar cuando uso arreglo de caracteres?

Saludos!


Título: Re: No entiendo la funcion del cin en este programa Arreglo de caracteres
Publicado por: DickGumshoe en 8 Julio 2012, 21:22 pm
Normalmente pasa lo que ha mencionado durasno cuando es una cadena de caracteres, ya que es cuando se suele introducir un espacio. Pero si estás pidiendo un número y pones un espacio, también te lo deja por la mitad.

Saludos.


Título: Re: No entiendo la funcion del cin en este programa Arreglo de caracteres
Publicado por: rmhak en 9 Julio 2012, 15:58 pm
El cin siempre que lo uses y para el tipo de datos que lo uses se comporta igual, solo lee hasta un espacio, un tabulador, un salto de línea. Es un flujo de entrada.
Al introducir "hola todos" estás escribiendo hola(espacio)todos(salto de línea). El primer cin lee hasta el espacio y el segundo cin lee hasta el salto de línea por eso brinca la línea y no te deja escribir. Si al final del programa introduces un tercer cin si podrías escribir. Un string no es un tipo básico de c++ y aunque no uses un arreglo y usases un string ocurriría lo mismo, al igual que con cualquier tipo básico (char, int, float...).

Te dejo un ejemplo de como leer una línea completa en c++ (http://www.cplusplus.com)
Código
  1. // getline with strings
  2. #include <iostream>
  3. #include <string>
  4. using namespace std;
  5.  
  6. int main () {
  7.  string str;
  8.  cout << "Please enter full name: ";
  9.  getline (cin,str);
  10.  cout << "Thank you, " << str << ".\n";
  11. }
  12.  

Un saludo.


Título: Re: No entiendo la funcion del cin en este programa Arreglo de caracteres
Publicado por: CATBro en 11 Julio 2012, 00:46 am
Muchas gracias ya mas claro, ya solo queda practicar
Saludos