Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - vaneexd

#1
Programación C/C++ / Problema en ejecucion
18 Noviembre 2013, 19:17 PM
Tengo el siguiente codigo que me compila pero no me ejecuta, me gyustraria que me dijeran cual es el error

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define STACKSIZE 50

struct stack_struct{
       unsigned int size_algo;
       int tipo[STACKSIZE];
};

typedef struct stack_struct stack;
 
stack * crear_stack_corchete (){
      stack * corchete;
      stack l_corchete;
      corchete=&l_corchete;                                   /
      corchete->size_algo = 0;
      return corchete;
   }

stack * crear_stack_llave(){
      stack * llave;
      stack l_llave;
      llave=&l_llave;            
      llave->size_algo = 0;
      return llave;
   }
stack * crear_stack_parentesis(){
      stack * parentesis;
      stack l_parentesis;   
      parentesis=&l_parentesis;         
      parentesis->size_algo=0;
      return parentesis;
   }

void balancear(stack *parentesis, stack *corchete,stack *llave, char tipo, int linea){ 
     if ((int)tipo==40){
        parentesis->tipo[parentesis->size_algo++]=linea;     
        }
     if ((int)tipo==91){
        corchete->tipo[corchete->size_algo++]=linea;
     }
     if ((int)tipo== 123){
        llave->tipo[llave->size_algo++]=linea;
     }
     if ((int)tipo== 41){
        if (parentesis->size_algo <1){
           printf ("Error: Caracter ) no balanceado en la linea %d.\n", *parentesis);
        }
        else{
             parentesis->tipo[parentesis->size_algo--];
        }
     }             
     if ((int)tipo==93){
        if (corchete->size_algo<1){
           printf ("Error: Caracter ] no balanceado en la linea %d.\n", *corchete);
        }
        else{
        corchete->tipo[corchete->size_algo--];
        }
     }
     if ((int)tipo==125){
        if (llave->size_algo <1){
           printf ("Error: Caracter } no balanceado en la linea %d.\n", *llave);
        }
        else{
             llave->tipo[llave->size_algo--];
        }
     }
}
                                 
int main(int argc, char* argv[]){
     stack *parentesis=crear_stack_parentesis();               
     stack *corchete=crear_stack_llave();
     stack *llave=crear_stack_corchete();
     unsigned int linea;
     char es_comilla=0;                                                         
     char es_apostrofe=0;
     char caracter;
     FILE* archivo=fopen(argv[1],"r");
     caracter=(char)fgetc (archivo);
     if (archivo==NULL){                                                         
        printf("Error: archivo nulo");
     }
     else{
          while ( caracter != EOF){
                if ((int)caracter== 34){
                   if(es_comilla==1){
                                     es_comilla=0;
                   }
                   else{
                        es_comilla=1;
                          }
                if((int)caracter==39){
                   if (es_apostrofe==1){
                      es_apostrofe=0;
                   }
                   else{
                        es_apostrofe=1;
                   }
                }
                if (!(es_comilla || es_apostrofe)){
                   balancear(&parentesis,&corchete,&llave,caracter,linea);
                }
                if (caracter=='\n'){
                   linea++;
                }
          }
          if (caracter==EOF){
             if (es_comilla==0&& es_apostrofe==0 && parentesis->size_algo==0 && corchete->size_algo==0 && llave->size_algo==0){
                printf("Revision completada sin errores.\n");
             }
             if( es_comilla==1 || es_apostrofe==1){
                 printf("Error: EOF encontrado cuando se esperaba caracter limitador de parentesis o string.\n");
             }
             if (parentesis->size_algo!=0){
                while (parentesis->size_algo>0){
                      printf ("Error: Caracter ( no balanceado en la linea %d.\n", *parentesis);
                      parentesis->tipo[parentesis->size_algo--];
                }
             }
             if (corchete->size_algo!=0){
                while (corchete->size_algo>0){
                      printf("Error: Caracter [ no balanceado en la linea %d.\n", *corchete);
                      corchete->tipo[corchete->size_algo--];
                }
             }
             if (llave->size_algo!=0){
                while (parentesis->size_algo>0){
                      printf("Error: Caracter { no balanceado en la linea %d.\n", *llave);
                      llave->tipo[llave->size_algo--];
                }
             }
             
          }
      }
  }
return 0;
fclose(archivo);     
system ("pause");
}