[C con Clase] Duda con "cin"

Steven Richard Davidson stevenrichard.davidson en gmail.com
Mar Dic 4 10:26:36 CET 2007


Hola Pierre,

On Dec 3, 2007 11:10 PM, Pierre van der Laat Ulate <pierre1 en racsa.co.cr> wrote:
> He estado intentando utilizar el comando "cin", para hacer el ejercicio 1 del
> Capítulo 11.  Sin embargo, cuando ingreso nombres compuestos (separados por
> espacios), el programa se vuelve loco y empieza a correr sin control.
> ¿Existe algún comando para almacenar nombres con espacios, tal vez alguna
> librería aparte de iostream?
>

Luis te ha respondido, pero tengo que aclarar que 'gets()' aún siendo
estándar no es recomendable usarla. En su lugar, se debería usar
'fgets()', ya que con ésta podemos indicar la cantidad máxima de
caracteres, mientras que con 'gets()' no. Esto supondría un grave
peligro si permitimos leer caracteres sin algún criterio en cuanto a
su longitud.

De todas maneras, no es nada aconsejable mezclar funcionalidades de
<cstdio> con <iostream>. Para lo que quieres hacer, puedes usar la
función miembro 'getline()'. Por ejemplo,

char szNombreCompleto[256];

cin.getline( szNombreCompleto, 256 );

Aquí por defecto, se detendrá si se encuentra el carácter de
fin-de-línea, '\n'. Si quieres otro carácter separador, puedes agregar
un tercer parámetro con este fin. Por ejemplo,

char szNombreCompleto[256];

cin.getline( szNombreCompleto, 256, ';' );

Con esto, leemos hasta,
a) 255 caracteres,
b) encontrar el primer ';', y
c) fin-de-fichero (EOF).

> Adjunto el archivo con el ejercicio mencionado.
>

Quisiera pedir que los asuntos de los ejercicios los dejaras para el
apartado de correo-e: "ejercicioscpp en conclase.net", especialmente
cuando das código fuente. Así no tentamos a los demás seguidores que
estén haciendo los ejercicios del curso.


Espero que lo anterior te ayude.

Steven




Más información sobre la lista de distribución Cconclase