No entiendo la funcion del cin en este programa Arreglo de caracteres

Iniciado por CATBro, 8 Julio 2012, 04:16 AM

0 Miembros y 1 Visitante están viendo este tema.

CATBro

Que onda! No entiendo para que poner ese cin ????

Código (cpp) [Seleccionar]

/*********************************
*    Arreglos de caracteres      *
*********************************/

#include <iostream>
using std::cout;
using std::endl;
using std::cin;

int main()
{
        char cadena1[ 20 ]; // reserva 20 caracteres
        char cadena2[] = "literal de cadena" ; // reserva 17 caracteres

        cout << "Escribe la cadena \"hola todos\" : ";
        cin >> cadena1;

        cout << "cadena1 es: " << cadena1 << "\ncadena2 es: " << cadena2; 

        cout << "\ncadena1 con espacios entre caracteres es:\n"; 

        for ( int i = 0; cadena1[ i ] != '\0'; i++ )
        {
                cout << cadena1[ i ] << " " ;
        }// fin de for

        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
        cout << "\ncadena1 es: " << cadena1 << endl;

        return 0;
 
}// fin de main



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

durasno

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
Ahorrate una pregunta, lee el man

CATBro

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!

DickGumshoe

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.

rmhak

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 (cpp) [Seleccionar]

// getline with strings
#include <iostream>
#include <string>
using namespace std;

int main () {
  string str;
  cout << "Please enter full name: ";
  getline (cin,str);
  cout << "Thank you, " << str << ".\n";
}


Un saludo.

CATBro

Muchas gracias ya mas claro, ya solo queda practicar
Saludos