Ayuda con función (Errores raros)

Iniciado por bsantana, 12 Abril 2016, 04:49 AM

0 Miembros y 1 Visitante están viendo este tema.

bsantana

En esta funcion me arroja dos errores:
1)expected '}' before 'else'
2)break statement not within loop or switch

El primer error corresponde a la linea del

               printf("as");
               else if (contador<=columDisponibles){

Y el segundo error correponde al de

           if(palabra[h]=='\0'){
               break;
           }


Es como si perdiera la referencia del while o de los if, siendo que revisando cada llave, estan bien segun yo. Dejo el codigo de la funcion completa:

char** definirDificultad(char ** nuevaMatriz,int N, int M ,int dificultad){
   int i,j,h,contador, filasDisponibles,columDisponibles;
   char caracter;
   char palabra[200];
   //palabra=(char*)malloc(sizeof(char));

   for(i=0;i<N;i++){
       for(j=0;j<M;j++){
           nuevaMatriz[i][j]='&';
       }
   }

   FILE *diccionario;
   diccionario=fopen("Diccionario.txt","r");

   posicion *posicionActual;
   posicionActual=malloc(sizeof(posicion));

   //Palabras horizontales
   if(dificultad==1){

       for(i=0;i<N;i++){
           for(j=0;j<M;j++){
               fscanf(diccionario,"%c",&caracter);
               if(feof(diccionario)){
                   break;
               }
               if (caracter!='\n'){
                   nuevaMatriz[i][j]=caracter;
               }
           }
       }

   }
   // Palabras verticales
   else if(dificultad==2){
       rewind(diccionario);
       h=0;
       while(!feof(diccionario)){
           fscanf(diccionario,"%c",&palabra[h]);
           h++;
       }
       palabra[h-1]='\0';
       h=0;
       j=0;
       int k=0;
       posicionActual->x=0;
       posicionActual->y=0;
       while(palabra[h]!='\0'){
           contador=0;
           while(palabra[h]!='\n'){
               contador++;
               h++;
           }
           k=h-contador;
           if(contador<=N && contador<=M && contador!=0){
               filasDisponibles=N-(posicionActual->x);
               columDisponibles=M-(posicionActual->y);
               if(contador<=filasDisponibles){
                   for(i=posicionActual->x;i<(contador+posicionActual->x);i++){
                       if(i>=N){
                           break;
                       }
                       else if(nuevaMatriz[i][j]=='&' || nuevaMatriz[i][j]==palabra[k]){
                           nuevaMatriz[i][j]=palabra[k];
                           k++;
                       }
                   }
                   i=posicionActual->x;
                   while(nuevaMatriz[i][j]!='&'){
                       j++;
                       if(j>=M){
                           j=0;
                           i++;
                       }
                   }
                   posicionActual->y=j;
                   posicionActual->x=i;
               }
               printf("as");
               else if (contador<=columDisponibles){
                   for(j=posicionActual->y;j<(contador+posicionActual->y);j++){
                       if(j>=M){
                           break;
                       }
                       else if(nuevaMatriz[i][j]=='&' || nuevaMatriz[i][j]==palabra[k]){
                           nuevaMatriz[i][j]=palabra[k];
                           k++;
                       }
                   }
                   j=posicionActual->y;
                   while(nuevaMatriz[i][j]!='&'){
                       j++;
                       if(i>=N){
                           i=0;
                           j++;
                       }
                   }
                   posicionActual->y=j;
                   posicionActual->x=i;
               }
           }
           if(palabra[h]=='\0'){
               break;
           }
           h++;
       }
   }
   //free(palabra);
   free(posicionActual);
   fclose(diccionario);
   return nuevaMatriz;
}

engel lex

la primera si observas bien es un poco obvia, estás rompiendo el flujo del if

}
                printf("as");
                else if (contador<=columDisponibles){



el if debe ser
if(x){
a();
}else if(y){
b();
}


tu estás rompiendo el if al hacer

if(x){
a();
}//rompes el flujo
algo_fuera_de_lugar();
else if(y){
b();
}


el segundo probablemente es heredado por el primero (rompiste el flujo y no sabe ya donde va que)

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

bsantana

Cita de: engel lex en 12 Abril 2016, 05:06 AM
la primera si observas bien es un poco obvia, estás rompiendo el flujo del if

}
                printf("as");
                else if (contador<=columDisponibles){



el if debe ser
if(x){
a();
}else if(y){
b();
}


tu estás rompiendo el if al hacer

if(x){
a();
}//rompes el flujo
algo_fuera_de_lugar();
else if(y){
b();
}


el segundo probablemente es heredado por el primero (rompiste el flujo y no sabe ya donde va que)
Mmh gracias no tenia claridad con eso, pero puse ese printf porque la funcion no ingresa al "else if", no realiza nada de lo que está dentro de él.
Pero gracias me sirve para comprender mejor el elif.

engel lex

te recomiendo que para resolver errores de tiempo de ejecución (no entra al else) uses el debugger de tu IDE, seguramente si buscas en google "debugger [el nombre de tu IDE]" consigues como usarlo y puede ser sumamente practico
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

bsantana

Cita de: engel lex en 12 Abril 2016, 05:28 AM
te recomiendo que para resolver errores de tiempo de ejecución (no entra al else) uses el debugger de tu IDE, seguramente si buscas en google "debugger [el nombre de tu IDE]" consigues como usarlo y puede ser sumamente practico

Ya resolvi todos los problemas, y gracias por el dato, investigaré!