Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Preguntilla De C

Iniciado por tywok_, 13 de Diciembre de 2004, 08:10:00 PM

« anterior - próximo »

tywok_

 Hola! Estaba haciendoun programita para que me calculase una cosa de un problema de mates pero me encontre un pequeño bug..
a ver os pongo el codigo


#include<stdio.h>
[b]int numveces;[/b]
int numcambios;
int in[9];

[b]void busca(int nivel){[/b]
if(nivel==8){
 if(in[7]==1)numcambios++;
 if(numcambios == 6){
 
  [b]numveces++;[/b]
  printf("%d ",numveces);
 }
}
else{
 for(in[nivel]=0;in[nivel]<2;in[nivel]++){
  if(nivel==0){
   if(in[nivel]==0)numcambios++;
   busca(nivel+1);
   if(in[nivel]==0)numcambios--;
  }
  else{
   if(in[nivel-1]==in[nivel]){
    busca(nivel+1);
   }
   else{
    numcambios++;
    busca(nivel+1);
    numcambios--;
   }
  }
 }
}
}



int main(){
[b]int numveces=0;[/b]
int numcambios=0;
[b]busca(0);[/b]
[b]printf("%d\n",numveces);[/b]
return 0;
}


Bueno, este es el codigo. Os he puesot en negrita lo importante. A ver, en la función busca, que es recursiva, modifico la variable global numveces y en el debug he comprobado q es asi. Pero cuando salgo de la recursiva, me toma como valor 0, en el printf ese. ¿Por que es? Osea, supongo q es por el scope, pero segun tenia entendido yo, eso se puede hacer y si no recuerdo mal lo he hecho alguna vez. ALguien tiene alguna idea?

Juan Mellado

 Tienes dos veces declarada la variable numveces:

- La primera vez de forma global, que es la que se actualiza en la función busca().

- La segunda vez de forma local al main(). En el main() predomina esta variable local (sobre la global) que por tanto nunca se modifica y siempre vale cero.

Quita la local, e inicializa la global a cero directamente en su declaración.

Saludos

tywok_

 coño, es verdad(grrr) q mal, no me di cuenta . muchas gracias!






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.