Hi, I am programming something to change from infix to postfix notation, However I get a general protection exception when i try to call the function that checs if the notation is correct.
I don´t even know what a general protection exception is, can someone tell me please what is it, and also, can someone help me to get rid of it, i´ll place the first part of the code:
Code:void cambio(int,int); //esta funcion cambia entre las bases char *pedir_infija(); //esta funcion pide la expresion de forma infija char *posfija(char*); //esta funcion cambia la expresion a postfija int comprobar(char*); //comprueba que la expresi¢n se haya dado de manera correcta int eval(char *); //Da el resultado de la postfija int convnum(char); //Convierte el caracter a su numero equivalente void main(){ clrscr(); int comp=0,resul=0,op=0,z=1,yapos=0,yain=0,sicon=0,base=10; char *expre, *postex; while(op!=4){ op=0; while(op>z||op<1){ z=1; printf("\n\n---------Convertidor de expresiones---------\n"); printf("\n%d. Aceptar infija",z++); if(yain==1){ printf("\n%d. Convertir a postfija",z++); } if (yapos==1){ if(resul==-60){ printf("\nOperacion invalida division entre cero"); }else{ printf("\n%d. Evaluar postfija",z++); } } printf("\n%d. Salir\n\n Opcion: ",z); scanf("%d",&op); getchar(); } if(op==z)op=4; switch(op){ case 1: comp=0; while(comp==0){ //mientras no sea valida la expresion la pedirI am silly de nuevo printf("\nDame la expresion infija: "); scanf("%s",&expre); getchar(); comp=comprobar(expre); /* general protectio exception is here*/ } //printf("\nLa expresi¢n infija es: %s",expre); yain=1; yapos=0; break; case 2: postex=posfija(expre); //llamada a la conversion a postfija printf("Postfija: "); printf("%s",postex); resul=eval(postex); yapos=1; break; case 3: //calcula el resultado printf("Resultado: %d",resul); sicon=0; while(sicon!=2){ sicon=0; while(sicon>2||sicon<1){ printf("\nConvertir? (1.Si,2.No): "); scanf("%d",&sicon); getchar(); } if(sicon!=2){ printf("\nEscribe la base: "); scanf("%d",&base); cambio(resul,base); } } break; } } } int comprobar(char *expre){ /*here is where the function begins*/ int x,y=1,abr=0,cer=0; for(x=0;x<strlen(expre);x++){ //va comprobando cada caracter //comprueba de la lista de posibles caracteres que no haya ninguno if(expre[x]!='+'&&expre[x]!='-'&&expre[x]!='*'&&expre[x]!='/'&&expre[x]!='%'&&expre[x]!='('&&expre[x]!=')'&&!isdigit(expre[x])) y=0; if(expre[x]=='+'||expre[x]=='-'||expre[x]=='%'||expre[x]=='/'||expre[x]=='*'){ //En caso de que sea operador if((!isdigit(expre[x-1])&&expre[x-1]!=')')||x==0){ //si el anterior a l operador no es un digito y=0; } } if(expre[x]=='('){ //cuenta parentesis abiertos abr++; } if(expre[x]==')'){ //cuenta parentesis cerrados cer++; } if(expre[x]==')'){ //verifica que cuando cierre parentesis lo anterior sea digito if(!isdigit(expre[x-1])&&expre[x-1]!=')') y=0; } } if(abr!=cer) y=0; //si no son la misma cantidad de parentesis abiertos que cerrados if(!isdigit(expre[strlen(expre)-1])&&expre[strlen(expre)-1]!=')') y=0; //si el ultimo caracter es invalido if(y==0) printf("Expresion Invalida\n\n"); return y; } }
I wont´paste the rest of the code, since it is very long as you can see
thank you



LinkBack URL
About LinkBacks



)