Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: -- KiLiaN -- en 23 Agosto 2012, 18:48 pm



Título: Duda con declarar variables [C] [Solucionada]
Publicado por: -- KiLiaN -- en 23 Agosto 2012, 18:48 pm
Buenas, estoy estudiando C ayudandome del libro "Como programar en C 2º Edición" (es uno de los libros de la chincheta), he de decir que estoy iniciandome el C y si la pregunta es muy tonta pido disculpas, he usado el buscador del foro y no he encontrado nada que me ayude. En un ejercicio se pide que pongas un número y debes formar un cuadrado con asteriscos (*) dependiendo del número, más o menos asteriscos. Este es mi código:

Código
  1. #include <stdio.h>
  2.  
  3. int main(int argc, char *argv[])
  4. {
  5.  int contador = 1, puntos, contador2;
  6.  printf ("Escribe los puntos: ");
  7.  scanf ("%d", &puntos);
  8.  while (contador <= puntos){
  9.        contador2 = 1;
  10.        while (contador2 <= puntos) {
  11.              printf ("*");
  12.              contador2++;
  13.        }
  14.         printf ("\n");
  15.         contador++;
  16.    }
  17.  
  18.  system("PAUSE");
  19.  return 0;
  20. }

Así funciona perfectamente y me he tirado un buen rato dandole vueltas hasta que llegué a esa solución pero es que si lo cambias a:

Código
  1. #include <stdio.h>
  2.  
  3. int main(int argc, char *argv[])
  4. {
  5.  int contador = 1, puntos, contador2 = 1;
  6.  printf ("Escribe los puntos: ");
  7.  scanf ("%d", &puntos);
  8.  while (contador <= puntos){
  9.        while (contador2 <= puntos) {
  10.              printf ("*");
  11.              contador2++;
  12.        }
  13.         printf ("\n");
  14.         contador++;
  15.    }
  16.  
  17.  system("PAUSE");
  18.  return 0;
  19. }

No funciona y no se porque, tiene algo que ver el declarar las variables e inicializarlas en el momento de declararlas? o es por el While? Estoy usando Devc++ como IDE.

EDIT: Sigo dandole vueltas al código y creo que es porque al estar anidados los whiles cuando llega al segundo que es dónde hace uso de la variable contador2 en el primer bucle cambia la variable y en los siguientes bucles ya no es igual, al darle el valor 1 a contador2 antes de empezar el segundo while cuando acaba vuelve a tener valor de 1 y se puede ejecutar de nuevo el segundo while...espero que se me entienda xD

Gracias por leer.


Título: Re: Duda con declarar variables [C]
Publicado por: xiruko en 23 Agosto 2012, 18:57 pm
como has dicho si que tiene que ver con la declaracion de la variable contador2. en el primer ejemplo funciona bien, ya que para cada "contador" escribes tantos puntos que los cuentas con "contador2", y cuando acabas, pasas a la linea siguiente (contador++) y al contador2 que es quien marca las columnas le vuelves a asignar 1 para que empiece una nueva fila.

en el segundo ejemplo, no haces esto, asi que despues de la primera iteracion del while mayor, contador2 valdra lo que indique la variable "puntos" y nunca mas volvera a entrar en el segundo while. por lo que imprimira 1 linea de asteriscos y luego los saltos de linea que sean.

no se si me explique muy bien... sino coge un papel y un boli, o el bloc de notas, y sigue el flujo del programa para 2 o 3 iteraciones del while y lo veras.

un saludo!

edito: he visto ahora que ya lo has comentado, y yo liandome con la explicacion xD igualmente lo de seguir el flujo del programa te servira para cualquier code que hagas, asi que no esta de mas hacerlo para dudas de este estilo.


Título: Re: Duda con declarar variables [C]
Publicado por: -- KiLiaN -- en 23 Agosto 2012, 19:02 pm
Entonces era como pensaba, muchas gracias ;)