[C con Clase] Problemas con arrays

Davidson, Steven srd4121 en njit.edu
Vie Mayo 2 09:28:05 CEST 2014


Hola Giselle,

2014-05-02 0:22 GMT-04:00 Giselle <giselleskyers en gmail.com>:

> Hola a todos, mi nombre es Gisselle y estoy suscrita a su curso y lista de
> correos de C++.
>
>
Ante todo, bienvenida a nuestra lista de correo-e y a este "mundillo" de la
programación en C++.

Solo para hacer mas facil la comprension del programa les dejo en pasos lo
> que deseo hacer:
>
> 1- definir un array
> 2-solicitarle al usuario que ingrese un numero
> 3-a traves de un ciclo for, creo el indice de mi array
> 4-en un if anidado dentro del for condicione el cierre del ciclo al
> ingresarse un valor negativo
> 5-muestro los valores de mi array usando un cout. (esto no funciona!!!!)
>
> Alguien podria ayudarme por favor, estoy segura de que tengo algun error
> de logica, pero no lo veo.
>
>
Como no nos das el código fuente, no creo que podamos dar una ayuda
puntual. Sin embargo, por lo que nos dices, sospecho que el error es que
has intentado hacer algo así:

int aNumeros[1000];

for( ... )
{
  ...
}

cout << aNumeros << endl;

Si has hecho esto, entonces no te funcionará como esperas. 'cout <<'
interpreta arrays y punteros como una dirección de memoria, que en tu caso
puede explicar el enorme entero que aparece en pantalla. La excepción de
este comportamiento es cuando se trata de un array de 'char' que 'cout <<'
lo interpreta como una cadena de caracteres, mostrando cada carácter.

La solución es que debes mostrar cada elemento del array con 'cout <<'.
Esto implica que necesitas otro bucle para recorrer el array de principio
al final actual. Esto sugiere que requieres guardar previamente la cantidad
actual de lo enteros guardados en susodicho array.


Quisiera añadir que no es buena práctica forzar una salida abrupta de un
bucle. Según nos comentas, parece que estás usando 'break' para salir
forzosamente del bucle. En su lugar, intenta permitir que el bucle termine
según sus condiciones descritas, que para eso mismo existen. Por ejemplo,
podríamos usar un booleano,

bool bTerminar = false;
int num;

for( int i=0; i<1000 && !bTerminar; i++ )
{
  cin << num;

  if( num != -1 )
    aNumeros[i] = num;
  else
    bTerminar = true;
}

Una alternativa es colocar la condición de salida directamente en la
expresión condicional del bucle; al fin y al cabo, esta otra condición
dicta terminar el bucle. Por ejemplo,

// Caso particular: i=0
cin << num;

// Caso general: 0 < i < 1000
for( int i=1; i<1000 && num != -1; i++ )
{
  aNumeros[i-1] = num;
  cin << num;
}


Espero que todo esto te sea de ayuda.

Steven
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20140502/0b41371f/attachment.html>


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