Que onda! No entiendo para que poner ese cin ????
/*********************************
* 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
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
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!
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.
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)
// 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.
Muchas gracias ya mas claro, ya solo queda practicar
Saludos