Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: bsantana en 12 Abril 2016, 04:49 am



Título: Ayuda con función (Errores raros)
Publicado por: bsantana en 12 Abril 2016, 04:49 am
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
 
Código:
                printf("as");
                else if (contador<=columDisponibles){
Y el segundo error correponde al de
Código:
            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:

Código
  1. char** definirDificultad(char ** nuevaMatriz,int N, int M ,int dificultad){
  2.    int i,j,h,contador, filasDisponibles,columDisponibles;
  3.    char caracter;
  4.    char palabra[200];
  5.    //palabra=(char*)malloc(sizeof(char));
  6.  
  7.    for(i=0;i<N;i++){
  8.        for(j=0;j<M;j++){
  9.            nuevaMatriz[i][j]='&';
  10.        }
  11.    }
  12.  
  13.    FILE *diccionario;
  14.    diccionario=fopen("Diccionario.txt","r");
  15.  
  16.    posicion *posicionActual;
  17.    posicionActual=malloc(sizeof(posicion));
  18.  
  19.    //Palabras horizontales
  20.    if(dificultad==1){
  21.  
  22.        for(i=0;i<N;i++){
  23.            for(j=0;j<M;j++){
  24.                fscanf(diccionario,"%c",&caracter);
  25.                if(feof(diccionario)){
  26.                    break;
  27.                }
  28.                if (caracter!='\n'){
  29.                    nuevaMatriz[i][j]=caracter;
  30.                }
  31.            }
  32.        }
  33.  
  34.    }
  35.    // Palabras verticales
  36.    else if(dificultad==2){
  37.        rewind(diccionario);
  38.        h=0;
  39.        while(!feof(diccionario)){
  40.            fscanf(diccionario,"%c",&palabra[h]);
  41.            h++;
  42.        }
  43.        palabra[h-1]='\0';
  44.        h=0;
  45.        j=0;
  46.        int k=0;
  47.        posicionActual->x=0;
  48.        posicionActual->y=0;
  49.        while(palabra[h]!='\0'){
  50.            contador=0;
  51.            while(palabra[h]!='\n'){
  52.                contador++;
  53.                h++;
  54.            }
  55.            k=h-contador;
  56.            if(contador<=N && contador<=M && contador!=0){
  57.                filasDisponibles=N-(posicionActual->x);
  58.                columDisponibles=M-(posicionActual->y);
  59.                if(contador<=filasDisponibles){
  60.                    for(i=posicionActual->x;i<(contador+posicionActual->x);i++){
  61.                        if(i>=N){
  62.                            break;
  63.                        }
  64.                        else if(nuevaMatriz[i][j]=='&' || nuevaMatriz[i][j]==palabra[k]){
  65.                            nuevaMatriz[i][j]=palabra[k];
  66.                            k++;
  67.                        }
  68.                    }
  69.                    i=posicionActual->x;
  70.                    while(nuevaMatriz[i][j]!='&'){
  71.                        j++;
  72.                        if(j>=M){
  73.                            j=0;
  74.                            i++;
  75.                        }
  76.                    }
  77.                    posicionActual->y=j;
  78.                    posicionActual->x=i;
  79.                }
  80.                printf("as");
  81.                else if (contador<=columDisponibles){
  82.                    for(j=posicionActual->y;j<(contador+posicionActual->y);j++){
  83.                        if(j>=M){
  84.                            break;
  85.                        }
  86.                        else if(nuevaMatriz[i][j]=='&' || nuevaMatriz[i][j]==palabra[k]){
  87.                            nuevaMatriz[i][j]=palabra[k];
  88.                            k++;
  89.                        }
  90.                    }
  91.                    j=posicionActual->y;
  92.                    while(nuevaMatriz[i][j]!='&'){
  93.                        j++;
  94.                        if(i>=N){
  95.                            i=0;
  96.                            j++;
  97.                        }
  98.                    }
  99.                    posicionActual->y=j;
  100.                    posicionActual->x=i;
  101.                }
  102.            }
  103.            if(palabra[h]=='\0'){
  104.                break;
  105.            }
  106.            h++;
  107.        }
  108.    }
  109.    //free(palabra);
  110.    free(posicionActual);
  111.    fclose(diccionario);
  112.    return nuevaMatriz;
  113. }


Título: Re: Ayuda con función (Errores raros)
Publicado por: 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

Código
  1. }
  2.                printf("as");
  3.                else if (contador<=columDisponibles){


el if debe ser
Código
  1. if(x){
  2. a();
  3. }else if(y){
  4. b();
  5. }

tu estás rompiendo el if al hacer

Código
  1. if(x){
  2. a();
  3. }//rompes el flujo
  4. algo_fuera_de_lugar();
  5. else if(y){
  6. b();
  7. }

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



Título: Re: Ayuda con función (Errores raros)
Publicado por: bsantana en 12 Abril 2016, 05:24 am
la primera si observas bien es un poco obvia, estás rompiendo el flujo del if

Código
  1. }
  2.                printf("as");
  3.                else if (contador<=columDisponibles){


el if debe ser
Código
  1. if(x){
  2. a();
  3. }else if(y){
  4. b();
  5. }

tu estás rompiendo el if al hacer

Código
  1. if(x){
  2. a();
  3. }//rompes el flujo
  4. algo_fuera_de_lugar();
  5. else if(y){
  6. b();
  7. }

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.


Título: Re: Ayuda con función (Errores raros)
Publicado por: 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


Título: Re: Ayuda con función (Errores raros)
Publicado por: bsantana en 12 Abril 2016, 05:42 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é!