elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Process returned 0
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Process returned 0  (Leído 3,550 veces)
m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
Process returned 0
« en: 19 Enero 2014, 23:40 pm »

Saludos, tengo entendido que al compilar un programa si te aparece un mensaje que diga Process returned 0 (0x0) quiere decir que compilo bien y sin errores, pero a mi en el siguiente codigo no me aparece ese mensaje, pero tampoco me aparecen mensajes de error o warnings, el programa tiene que leer un archivo y almacenar algunos datos en la variable que le corresponda, pero no se donde esta el error?? y por que el programa no termina como deberia

Código
  1. int main()
  2. {
  3.    int car,i;
  4.    FILE *hc12;
  5.    COD *cabeza = NULL,*ultimo;
  6.    char *ins,*op,*dir[MAX],*maq[MAX],*cal[MAX],*x_cal[MAX],*suma[MAX];
  7.    if((hc12 = fopen("archivo.txt","r"))!= NULL)
  8.    {
  9.        while((car = fgetc(hc12))!= EOF)
  10.        {
  11.            i = 0;
  12.            ins = Tabla_Operandos(hc12);
  13.            printf("%s\t",ins);
  14.            ignorarEspacios(hc12);
  15.            op = Tabla_Operandos(hc12);
  16.            printf("%s",op);
  17.            do
  18.            {
  19.                ignorarEspacios(hc12);
  20.                dir[i] = Tabla_Operandos(hc12);
  21.                printf("\t\t%s\t",dir[i]);
  22.                ignorarEspacios(hc12);
  23.                maq[i] = Tabla_Operandos(hc12);
  24.                printf("%s\t",maq[i]);
  25.                ignorarEspacios(hc12);
  26.                cal[i] = Tabla_Operandos(hc12);
  27.                printf("%s\t",cal[i]);
  28.                ignorarEspacios(hc12);
  29.                x_cal[i] = Tabla_Operandos(hc12);
  30.                printf("%s\t",x_cal[i]);
  31.                ignorarEspacios(hc12);
  32.                suma[i] = Tabla_Operandos(hc12);
  33.                printf("%s\n",suma[i]);
  34.                buscarFinLinea(hc12);
  35.                i++;
  36.            }while(car == '\t');
  37.        }
  38.    }
  39.    return 0;
  40. }
  41.  
  42. void buscarFinLinea(FILE *fd)
  43. {
  44.    int car;
  45.    while((car = fgetc(fd))!= '\n')
  46.        ;
  47. }
  48.  
  49. void ignorarEspacios(FILE *fd)
  50. {
  51.    int car;
  52.    do
  53.    {
  54.        car = fgetc(fd);
  55.    }while(car == '\t' || car == ' ');
  56. }
  57.  
  58. char *Tabla_Operandos(FILE *hc12)
  59. {
  60.    int car,lon = 0,pos;
  61.    char *cadena;
  62.    fseek(hc12,-1,SEEK_CUR);
  63.    pos = ftell(hc12);
  64.    do
  65.    {
  66.        car = fgetc(hc12);
  67.        lon++;
  68.    }while(car != '\t' && car != ' ');
  69.    fseek(hc12,pos,SEEK_SET);
  70.    cadena = calloc(lon+1);
  71.    fgets(cadena,lon+1,hc12);
  72.    quitarSaltosLinea(cadena);
  73.    return cadena;
  74. }
  75.  

de antemano gracias


En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Process returned 0
« Respuesta #1 en: 19 Enero 2014, 23:59 pm »

Tienes que diferenciar entre 3 clases de errores:

- Errores de compilación. Los que detecta el compilador.
- Error de ejecución, es cuando el progama aborta inesperadamente. Se puede "comprobar" con del return 0, ya que eso indica que ha conseguido llegar hasta la última línea del progama. Si tienes un error de ejecución y quieres saber que línea lo provoca, te recomiendo que pongas pausas en el progama (o varios printf que te vayan diciendo la linea) así sabrás a partir de que línea falla.
- Errores lógicos, el progama funciona pero no hace lo que debería.

Y yendo al grano, el error (que no puedo porque no tengo ni el archivo ni el código completo). Ahora bien, hay algunas cosas que no me gustan:

Código
  1. void buscarFinLinea(FILE *fd)
  2. {
  3.   int car;
  4.   while((car = fgetc(fd))!= '\n')
  5.       ;
  6. }
  7.  
  8. void ignorarEspacios(FILE *fd)
  9. {
  10.   int car;
  11.   do
  12.   {
  13.       car = fgetc(fd);
  14.   }while(car == '\t' || car == ' ');
  15. }
  16.  
  17. char *Tabla_Operandos(FILE *hc12)
  18. {
  19.   int car,lon = 0,pos;
  20.   char *cadena;
  21.   fseek(hc12,-1,SEEK_CUR);
  22.   pos = ftell(hc12);
  23.   do
  24.   {
  25.       car = fgetc(hc12);
  26.       lon++;
  27.   }while(car != '\t' && car != ' ');
  28.  
  29.   //...
  30. }
  31.  

Que pasa si mientras estas leyendo, te encuentras un final de archivo?. Deberías comprobar que car != EOF en esos 3 bucles.

Y yendo al bucle principal:

Código
  1. do
  2. {
  3.    ignorarEspacios(hc12);
  4.    dir[i] = Tabla_Operandos(hc12);
  5.    printf("\t\t%s\t",dir[i]);
  6.    ignorarEspacios(hc12);
  7.    maq[i] = Tabla_Operandos(hc12);
  8.    printf("%s\t",maq[i]);
  9.    ignorarEspacios(hc12);
  10.    cal[i] = Tabla_Operandos(hc12);
  11.    printf("%s\t",cal[i]);
  12.    ignorarEspacios(hc12);
  13.    x_cal[i] = Tabla_Operandos(hc12);
  14.    printf("%s\t",x_cal[i]);
  15.    ignorarEspacios(hc12);
  16.    suma[i] = Tabla_Operandos(hc12);
  17.    printf("%s\n",suma[i]);
  18.    buscarFinLinea(hc12);
  19.    i++;
  20. }
  21. while(car == '\t');
¿Que pasa si i se hace más grande que MAX?

Otro consejo es que separes las líneas en bloques. Se ve más claro el código:
Código
  1. do
  2. {
  3.    //dir
  4.  
  5.    ignorarEspacios(hc12);
  6.    dir[i] = Tabla_Operandos(hc12);
  7.    printf("\t\t%s\t",dir[i]);
  8.  
  9.    //maq
  10.  
  11.    ignorarEspacios(hc12);
  12.    maq[i] = Tabla_Operandos(hc12);
  13.    printf("%s\t",maq[i]);
  14.  
  15.    //cal
  16.  
  17.    ignorarEspacios(hc12);
  18.    cal[i] = Tabla_Operandos(hc12);
  19.    printf("%s\t",cal[i]);
  20.  
  21.    //x_cal
  22.  
  23.    ignorarEspacios(hc12);
  24.    x_cal[i] = Tabla_Operandos(hc12);
  25.    printf("%s\t",x_cal[i]);
  26.  
  27.    //suma
  28.  
  29.    ignorarEspacios(hc12);
  30.    suma[i] = Tabla_Operandos(hc12);
  31.    printf("%s\n",suma[i]);
  32.  
  33.    //fin de linea
  34.  
  35.    buscarFinLinea(hc12);
  36.    i++;
  37. }


« Última modificación: 20 Enero 2014, 00:01 am por amchacon » En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
Re: Process returned 0
« Respuesta #2 en: 20 Enero 2014, 21:36 pm »

Saludos amchacon y gracias por tu respuesta, tenias razon el problema es que tenia que agregarle la condicion de car != EOF, y ahora ya funciona, solo que ahora cambie un poco el codigo porque le agregue unas lineas al archivo, el archivo es el siguiente:

Citar
ADCA   SI   IMM      89ii      1   1   2
                   DIR      99dd      1   1   2
                   EXT      B9hhll      1   2   3
                   IDX      A9xb      1   1   2
                   IDX1      A9xbff      1   2   3
                   IDX2      A9xbeeff   1   3   4
                   [D,IDX]     A9xb      1   1   2
                   [IDX2]   A9xbeeff   1   3   4
ADCB   SI   IMM      C9ii      1   1   2
                  DIR      D9dd      1   1   2
                  EXT      F9hhll      1   2   3
                  IDX      E9xb      1   1   2
                  IDX1      E9xbff      1   2   3
                  IDX2      E9xbeeff   1   3   4
                  [D,IDX]   E9xb      1   1   2
                  [IDX2]   E9xbeeff   1   3   4
antes el archivo solo tenia la informacion del codop ADCA pero para que me leyera el de ADCB tambien, tuve que modificarlo, el codigo si me imprime ,solo que me imprime unos espacios en blanco que sobran despues de leer la ultima linea del archivo y tambien la informacion del [D,IDX] del codop ADCB no la imprime completa y tampoco la del IMM del ADCB, por que sera esto??

el codigo es:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #define MAX 8
  5.  
  6. typedef enum {INS,OP,DIR,MAQ,CAL,X_CAL,TOTAL} tabla;
  7.  
  8. int main()
  9. {
  10.    int car,i;
  11.    FILE *hc12;
  12.    COD *cabeza = NULL,*ultimo;
  13.    char *ins,*op,*dir[MAX],*maq[MAX],*cal[MAX],*x_cal[MAX],*suma[MAX];
  14.    if((hc12 = fopen("archivo.txt","r"))!= NULL)
  15.    {
  16.        while((car = fgetc(hc12))!= EOF)
  17.        {
  18.            i = 0;
  19.            ins = Tabla_Operandos(hc12,INS);
  20.            printf("%s\t",ins);
  21.            ignorarEspacios(hc12);
  22.            op = Tabla_Operandos(hc12,OP);
  23.            printf("%s",op);
  24.            do
  25.            {
  26.                ignorarEspacios(hc12);
  27.                dir[i] = Tabla_Operandos(hc12,DIR);
  28.                printf("\t%s\t",dir[i]);
  29.                ignorarEspacios(hc12);
  30.                maq[i] = Tabla_Operandos(hc12,MAQ);
  31.                printf("%s\t",maq[i]);
  32.                ignorarEspacios(hc12);
  33.                cal[i] = Tabla_Operandos(hc12,CAL);
  34.                printf("%s\t",cal[i]);
  35.                ignorarEspacios(hc12);
  36.                x_cal[i] = Tabla_Operandos(hc12,X_CAL);
  37.                printf("%s\t",x_cal[i]);
  38.                ignorarEspacios(hc12);
  39.                suma[i] = Tabla_Operandos(hc12,TOTAL);
  40.                printf("%s\n",suma[i]);
  41.                buscarFinLinea(hc12);
  42.                i++;
  43.            }while(car == '\t' && car != EOF);
  44.        }
  45.    }
  46.    return 0;
  47. }
  48.  
  49. void buscarFinLinea(FILE *fd)
  50. {
  51.    int car;
  52.    while((car = fgetc(fd))!= '\n' && car != EOF)
  53.        ;
  54. }
  55.  
  56. void ignorarEspacios(FILE *fd)
  57. {
  58.    int car;
  59.    do
  60.    {
  61.        car = fgetc(fd);
  62.    }while(car == '\t' || car == ' ');
  63. }
  64.  
  65. char *Tabla_Operandos(FILE *hc12,int tabla)
  66. {
  67.  
  68.    int car,lon = 0,pos;
  69.    char *cadena;
  70.    fseek(hc12,-1,SEEK_CUR);
  71.    pos = ftell(hc12);
  72.    if((tabla==INS)||(tabla==OP)||(tabla==DIR)||(tabla==MAQ)||(tabla==CAL)||(tabla==X_CAL))
  73.    {
  74.        do
  75.        {
  76.            car = fgetc(hc12);
  77.            lon++;
  78.        }while(car != '\t' && car != EOF);
  79.    }
  80.    else
  81.    {
  82.        do
  83.        {
  84.            car = fgetc(hc12);
  85.            lon++;
  86.        }while(car != '\n' && car != EOF);
  87.        lon--;
  88.    }
  89.    fseek(hc12,pos,SEEK_SET);
  90.    cadena = (char*)calloc((lon+1),sizeof(char));
  91.    fgets(cadena,lon+1,hc12);
  92.    quitarSaltosLinea(cadena);
  93.    return cadena;
  94. }
  95.  
  96. void quitarSaltosLinea(char *cadena)
  97. {
  98.    char *ptr;
  99.    if(((ptr=strchr(cadena,'\n'))!=NULL)||((ptr=strchr(cadena,'\t'))!=NULL)||((ptr=strchr(cadena,' '))!=NULL))
  100.       *ptr = '\0';
  101. }
  102.  

gracias
« Última modificación: 20 Enero 2014, 21:46 pm por m@o_614 » En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Process returned 0
« Respuesta #3 en: 20 Enero 2014, 22:00 pm »

Saludos, tengo entendido que al compilar un programa si te aparece un mensaje que diga Process returned 0 (0x0) quiere decir que compilo bien y sin errores, pero a mi en el siguiente codigo no me aparece ese mensaje, pero tampoco me aparecen mensajes de error o warnings, el programa tiene que leer un archivo y almacenar algunos datos en la variable que le corresponda, pero no se donde esta el error?? y por que el programa no termina como deberia

Pues a mí me sale esto, nada de return 0:

C:\Users\Administrador\Documents\C\TEMP\Untitled2.c||In function 'main':|
C:\Users\Administrador\Documents\C\TEMP\Untitled2.c|12|error: unknown type name 'COD'|
C:\Users\Administrador\Documents\C\TEMP\Untitled2.c|19|warning: assignment makes pointer from integer without a cast [enabled by default]|
C:\Users\Administrador\Documents\C\TEMP\Untitled2.c|22|warning: assignment makes pointer from integer without a cast [enabled by default]|
C:\Users\Administrador\Documents\C\TEMP\Untitled2.c|27|warning: assignment makes pointer from integer without a cast [enabled by default]|
C:\Users\Administrador\Documents\C\TEMP\Untitled2.c|30|warning: assignment makes pointer from integer without a cast [enabled by default]|
C:\Users\Administrador\Documents\C\TEMP\Untitled2.c|33|warning: assignment makes pointer from integer without a cast [enabled by default]|
C:\Users\Administrador\Documents\C\TEMP\Untitled2.c|36|warning: assignment makes pointer from integer without a cast [enabled by default]|
C:\Users\Administrador\Documents\C\TEMP\Untitled2.c|39|warning: assignment makes pointer from integer without a cast [enabled by default]|
C:\Users\Administrador\Documents\C\TEMP\Untitled2.c|49|warning: conflicting types for 'buscarFinLinea' [enabled by default]|
C:\Users\Administrador\Documents\C\TEMP\Untitled2.c|41|note: previous implicit declaration of 'buscarFinLinea' was here|
C:\Users\Administrador\Documents\C\TEMP\Untitled2.c|56|warning: conflicting types for 'ignorarEspacios' [enabled by default]|
C:\Users\Administrador\Documents\C\TEMP\Untitled2.c|21|note: previous implicit declaration of 'ignorarEspacios' was here|
C:\Users\Administrador\Documents\C\TEMP\Untitled2.c|65|error: conflicting types for 'Tabla_Operandos'|
C:\Users\Administrador\Documents\C\TEMP\Untitled2.c|19|note: previous implicit declaration of 'Tabla_Operandos' was here|
C:\Users\Administrador\Documents\C\TEMP\Untitled2.c|96|warning: conflicting types for 'quitarSaltosLinea' [enabled by default]|
C:\Users\Administrador\Documents\C\TEMP\Untitled2.c|92|note: previous implicit declaration of 'quitarSaltosLinea' was here|
||=== Build finished: 2 errors, 10 warnings (0 minutes, 0 seconds) ===|

¿Seguro que has puesto todo el código?.

¡¡¡¡ Saluditos! ..... !!!!


En línea

m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
Re: Process returned 0
« Respuesta #4 en: 21 Enero 2014, 01:08 am »

leosansan si tienes razon el primer codigo me falto poner varias cosas, pero ahora el codigo que me da problemas es el ultimo que postee, el que tiene algunas cosas modificadas
En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Process returned 0
« Respuesta #5 en: 21 Enero 2014, 03:51 am »

leosansan si tienes razon el primer codigo me falto poner varias cosas, pero ahora el codigo que me da problemas es el ultimo que postee, el que tiene algunas cosas modificadas


Es que yo la prueba la hice con el segundo código. :rolleyes:



¡¡¡¡ Saluditos! ..... !!!!


En línea

m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
Re: Process returned 0
« Respuesta #6 en: 21 Enero 2014, 04:06 am »

ohhh si ya me fije lo que le falto, se me olvido ponerle los encabezados de las funciones

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #define MAX 8
  5.  
  6. typedef enum {INS,OP,DIR,MAQ,CAL,X_CAL,TOTAL} tabla;
  7.  
  8. typedef struct nodo
  9. {
  10.    char *instruccion;
  11.    char *operando;
  12.    char *modo_direccionamiento[MAX];
  13.    char *codigo_maquina[MAX];
  14.    char *bytes_calculados[MAX];
  15.    char *bytes_x_calcular[MAX];
  16.    char *suma_bytes[MAX];
  17.    struct nodo *sig;
  18. }COD;
  19.  
  20. void quitarSaltosLinea(char *cadena);
  21. void buscarFinLinea(FILE *fd);
  22. void ignorarEspacios(FILE *fd);
  23. void imprimirLista(COD *cabeza);
  24. char *Tabla_Operandos(FILE *hc12,int tabla);
  25.  
  26. int main()
  27. {
  28.    int car,i;
  29.    FILE *hc12;
  30.    COD *cabeza = NULL,*ultimo;
  31.    char *ins,*op,*dir[MAX],*maq[MAX],*cal[MAX],*x_cal[MAX],*suma[MAX];
  32.    if((hc12 = fopen("archivo.txt","r"))!= NULL)
  33.    {
  34.        while((car = fgetc(hc12))!= EOF)
  35.        {
  36.            i = 0;
  37.            ins = Tabla_Operandos(hc12,INS);
  38.            printf("%s\t",ins);
  39.            ignorarEspacios(hc12);
  40.            op = Tabla_Operandos(hc12,OP);
  41.            printf("%s",op);
  42.            do
  43.            {
  44.                ignorarEspacios(hc12);
  45.                dir[i] = Tabla_Operandos(hc12,DIR);
  46.                printf("\t%s\t",dir[i]);
  47.                ignorarEspacios(hc12);
  48.                maq[i] = Tabla_Operandos(hc12,MAQ);
  49.                printf("%s\t",maq[i]);
  50.                ignorarEspacios(hc12);
  51.                cal[i] = Tabla_Operandos(hc12,CAL);
  52.                printf("%s\t",cal[i]);
  53.                ignorarEspacios(hc12);
  54.                x_cal[i] = Tabla_Operandos(hc12,X_CAL);
  55.                printf("%s\t",x_cal[i]);
  56.                ignorarEspacios(hc12);
  57.                suma[i] = Tabla_Operandos(hc12,TOTAL);
  58.                printf("%s\n",suma[i]);
  59.                buscarFinLinea(hc12);
  60.                printf("*%c*",car);
  61.                i++;
  62.            }while(car == '\t');
  63.        }
  64.    }
  65.    return 0;
  66. }
  67.  
  68. void buscarFinLinea(FILE *hc12)
  69. {
  70.    int car;
  71.    while((car = fgetc(hc12))!= '\n' && car != EOF)
  72.        ;
  73. }
  74.  
  75. void ignorarEspacios(FILE *hc12)
  76. {
  77.    int car;
  78.    do
  79.    {
  80.        car = fgetc(hc12);
  81.    }while(car == '\t' || car == ' ');
  82. }
  83.  
  84. char *Tabla_Operandos(FILE *hc12,int tabla)
  85. {
  86.  
  87.    int car,lon = 0,pos;
  88.    char *cadena;
  89.    fseek(hc12,-1,SEEK_CUR);
  90.    pos = ftell(hc12);
  91.    if((tabla==INS)||(tabla==OP)||(tabla==DIR)||(tabla==MAQ)||(tabla==CAL)||(tabla==X_CAL))
  92.    {
  93.        do
  94.        {
  95.            car = fgetc(hc12);
  96.            lon++;
  97.        }while(car != '\t' && car != EOF);
  98.    }
  99.    else
  100.    {
  101.        do
  102.        {
  103.            car = fgetc(hc12);
  104.            lon++;
  105.        }while(car != '\n' && car != EOF);
  106.        lon--;
  107.    }
  108.    fseek(hc12,pos,SEEK_SET);
  109.    cadena = (char*)calloc((lon+1),sizeof(char));
  110.    fgets(cadena,lon+1,hc12);
  111.    quitarSaltosLinea(cadena);
  112.    return cadena;
  113. }
  114.  
  115. void quitarSaltosLinea(char *cadena)
  116. {
  117.    char *ptr;
  118.    if(((ptr=strchr(cadena,'\n'))!=NULL)||((ptr=strchr(cadena,'\t'))!=NULL)||((ptr=strchr(cadena,' '))!=NULL))
  119.       *ptr = '\0';
  120. }
  121.  

y el problema esta en que no imprime el archivo como deberia
« Última modificación: 21 Enero 2014, 04:10 am por m@o_614 » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines