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

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


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

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Problema con bucle infinito
« en: 30 Octubre 2016, 20:20 pm »

Hola a toda la comunidad, les deseo prospero dia!!
Resulta que tengo un codio que me produce un bucle infinito y las verdad no se porque me  
produce eso. Lo que hago es algo simple. Cargo dos archivos y en uno de los archivos quiero modificar el stock, osea actualizarlo, nada mas. A continuacion les paso el codigo:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. struct materiales{
  6. int codart, stock, stockmin;
  7. char desc[20];
  8. float precio;
  9. };
  10. struct ventas{
  11. int cod,cant;
  12. };
  13.  
  14.  
  15. //ACA YO CARGO EL ARCHIVO AMTERIALES
  16. main(){
  17. FILE *materiales;
  18. FILE *archivoventa;
  19. fpos_t pos;
  20. int op;
  21. struct materiales mat;
  22. struct ventas ven;
  23. if((materiales=fopen("materiales.dat","wb"))!=NULL){
  24. do{
  25. printf("\n\tIngrese el codigo del articulo");
  26. scanf("%d", &mat.codart);
  27. printf("\n\tIngrese un breve descripcion");
  28. gets(mat.desc);
  29. printf("\n\tIngrese stock actual del articulo");
  30. scanf("%d", &mat.stock);
  31. printf("\n\tIngrese stock minimo");
  32. scanf("%d", &mat.stockmin);
  33. printf("\n\tPor utimo ingrese precio");
  34. scanf("%f", &mat.precio);
  35. fwrite(&mat,sizeof(mat),1,materiales);
  36. printf("\n\t¿Desea ingresar otro articulo? [1]-para SI // [0]-Para NO");
  37. scanf("%d", &op);
  38. }while(op!=0);
  39. }else{
  40. printf("\n\nError de archivo");
  41. }
  42. fclose(materiales);
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51. //ACA YO CARGO EL ARCHIVO VENTAS
  52.  
  53.  
  54.  
  55.    int opc;
  56.  
  57.    if((archivoventa=fopen("ventas.dat","wb"))!=NULL){
  58. do{
  59.    printf("\n\tIngrese codigo del articulo");
  60. scanf("%d", &ven.cod);
  61. printf("\n\tIngrese cantidad vendida del articulo");
  62. scanf("%d", &ven.cant);
  63. fwrite(&ven,sizeof(ven),1,archivoventa);
  64. printf("\n\t¿Desea registrar otra venta? [1]-Para SI // [0]-Para NO");
  65. scanf("%d", &opc);
  66. }while(opc!=0);
  67.    }else{
  68. printf("\nError de archivo");
  69.    }
  70.    fclose(archivoventa);
  71.  
  72.  
  73.  
  74.  
  75.  
  76.  
  77.  
  78.  
  79.  
  80.  
  81.    //ACA ES DONDE ESTA LA FALLA
  82.  
  83.  
  84.    if((archivoventa=fopen("ventas.dat","rb"))!=NULL){
  85.        if((materiales=fopen("materiales.dat","r+b"))!=NULL){
  86. fread(&ven,sizeof(ven),1,archivoventa);
  87. while(!feof(archivoventa)){
  88. fread(&mat,sizeof(mat),1,materiales);      
  89. while(!feof(materiales)){
  90. if(mat.codart==ven.cod){
  91. mat.stock=mat.stock-ven.cant;
  92. printf("\n\nEl stock entonces quedo en %d", mat.stock);
  93. fseek(materiales, -1*(sizeof(mat)),SEEK_CUR);
  94. fwrite(&mat,sizeof(mat),1,materiales);
  95. }
  96. fread(&mat,sizeof(mat),1,materiales);
  97. printf("\nHola");    
  98.         }
  99.         rewind(materiales);
  100. fread(&ven,sizeof(ven),1,archivoventa);
  101. printf("\nHola2");  
  102.    }
  103.    }else{
  104.    printf("\nError archivo");
  105.    }
  106.    fclose(materiales);
  107. }else{
  108.      printf("\nError archivo");
  109.    }  
  110. fclose(archivoventa);  
  111. printf("\n\t\tError3");
  112.  
  113.  
  114. if((materiales=fopen("materiales.dat","rb"))!=NULL){
  115. fread(&mat,sizeof(mat),1,materiales);
  116. while(!feof(materiales)){
  117. printf("\n\nEl codigo de articulo es %d",mat.codart);
  118. printf("\n\nEl stock actualizado quedo asi %d",mat.stock);
  119. fread(&mat,sizeof(mat),1,materiales);
  120. }
  121.    }else{
  122. printf("Error");
  123.    }
  124.    fclose(materiales);
  125. }
  126.  
  127.  



Les agradeceria si me pueden ayudar!!!!!


Mod: Los titulo deben ser descriptivos


« Última modificación: 1 Noviembre 2016, 00:21 am por engel lex » En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Hola necesito ayuda con este codigo porfavor
« Respuesta #1 en: 31 Octubre 2016, 00:54 am »

He cambiado la variable tipo FILE* materiales por archivomateriales, para evitar un posible conflicto con el nombre del struct y esto es lo que he conseguido del programa:
   Ingrese el codigo del articulo1

   Ingrese un breve descripcionmesa

   Ingrese stock actual del articulo10

   Ingrese stock minimo5

   Por utimo ingrese precio10

   ¿Desea ingresar otro articulo? [1]-Para SI //
  • -Para NO0

   Ingrese codigo del articulo1

   Ingrese cantidad vendida del articulo6

   ¿Desea registrar otra venta? [1]-Para SI //
  • -Para NO0


El stock entonces quedo en 4
Hola
Hola2
      Error3

El codigo de articulo es 1

El stock actualizado quedo asi 4



En línea

magictheory

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: Hola necesito ayuda con este codigo porfavor
« Respuesta #2 en: 31 Octubre 2016, 01:42 am »

Hola muchas gracias por tu respuesta!!!!
Hola vos decis que el dev c++ puede llegar a confundirse? Vos lo compilaste en linux?



Hola MAFUS acabo de probar cambiar el nombre del archivo pero me sigue provocando un bucle infinito, que solo me imprime la palabra "hola". Vos solo le cambiaste eso o alguna cosa mas? Desde ya te agradezco!!!
« Última modificación: 31 Octubre 2016, 10:29 am por Eternal Idol » En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Hola necesito ayuda con este codigo porfavor
« Respuesta #3 en: 31 Octubre 2016, 02:20 am »

Eso y el gets por fgets para prevenir desbordamiento de buffer. Aquí el código modificado:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. struct materiales{
  6.   int codart, stock, stockmin;
  7.   char desc[20];
  8.   float precio;
  9. };
  10. struct ventas{
  11.      int cod,cant;
  12. };
  13.  
  14.  
  15. //ACA YO CARGO EL ARCHIVO AMTERIALES
  16. int main() {
  17.    FILE *archivomateriales;
  18.    FILE *archivoventa;
  19.    int op;
  20.    struct materiales mat;
  21.    struct ventas ven;
  22.  
  23.    if((archivomateriales=fopen("materiales.dat","wb")) != NULL) {
  24.        do {
  25.            printf("\n\tIngrese el codigo del articulo");
  26.            scanf("%d", &mat.codart);
  27.            printf("\n\tIngrese un breve descripcion");
  28.            getchar();
  29.            fgets(mat.desc, 20, stdin);
  30.            printf("\n\tIngrese stock actual del articulo");
  31.            scanf("%d", &mat.stock);
  32.            printf("\n\tIngrese stock minimo");
  33.            scanf("%d", &mat.stockmin);
  34.            printf("\n\tPor utimo ingrese precio");
  35.            scanf("%f", &mat.precio);
  36.            fwrite(&mat, sizeof(mat), 1, archivomateriales);
  37.            printf("\n\t¿Desea ingresar otro articulo? [1]-Para SI // [0]-Para NO");
  38.            scanf("%d", &op);
  39.        } while(op != 0);
  40.   }
  41.   else {
  42.      printf("\n\nError de archivo");
  43.   }
  44.   fclose(archivomateriales);
  45.  
  46. //ACA YO CARGO EL ARCHIVO VENTAS
  47.  
  48.    int opc;
  49.  
  50.    if((archivoventa=fopen("ventas.dat","wb")) != NULL) {
  51.        do{
  52.            printf("\n\tIngrese codigo del articulo");
  53.            scanf("%d", &ven.cod);
  54.            printf("\n\tIngrese cantidad vendida del articulo");
  55.            scanf("%d", &ven.cant);
  56.            fwrite(&ven,sizeof(ven),1,archivoventa);
  57.            printf("\n\t¿Desea registrar otra venta? [1]-Para SI // [0]-Para NO");
  58.            scanf("%d", &opc);
  59.        } while(opc!=0);
  60.    }
  61.    else {
  62.      printf("\nError de archivo");
  63.    }
  64.    fclose(archivoventa);
  65.  
  66.    //ACA ES DONDE ESTA LA FALLA
  67.  
  68.    if((archivoventa=fopen("ventas.dat","rb")) != NULL) {
  69.        if((archivomateriales=fopen("materiales.dat","r+b")) != NULL) {
  70.            fread(&ven, sizeof(ven), 1, archivoventa);
  71.            while(!feof(archivoventa)) {  
  72.                fread(&mat, sizeof(mat), 1, archivomateriales);          
  73.                while(!feof(archivomateriales)) {  
  74.                    if(mat.codart == ven.cod) {
  75.                         mat.stock = mat.stock-ven.cant;
  76.                         printf("\n\nEl stock entonces quedo en %d", mat.stock);
  77.                         fseek(archivomateriales, -1*(sizeof(mat)),SEEK_CUR);
  78.                         fwrite(&mat,sizeof(mat), 1, archivomateriales);
  79.                    }                        
  80.                    fread(&mat, sizeof(mat), 1, archivomateriales);
  81.                    printf("\nHola");    
  82.                }
  83.                rewind(archivomateriales);
  84.                fread(&ven,sizeof(ven),1,archivoventa);
  85.                printf("\nHola2");  
  86.            }
  87.        }
  88.        else {
  89.            printf("\nError archivo");
  90.        }
  91.        fclose(archivomateriales);  
  92.    }
  93.    else {
  94.        printf("\nError archivo");
  95.    }  
  96.    fclose(archivoventa);  
  97.    printf("\n\t\tError3");
  98.  
  99.    if((archivomateriales=fopen("materiales.dat","rb")) != NULL){
  100.        fread(&mat, sizeof(mat), 1, archivomateriales);
  101.        while(!feof(archivomateriales)) {
  102.            printf("\n\nEl codigo de articulo es %d", mat.codart);
  103.            printf("\n\nEl stock actualizado quedo asi %d", mat.stock);
  104.            fread(&mat, sizeof(mat), 1, archivomateriales);
  105.        }
  106.    }
  107.    else {
  108.        printf("Error");
  109.    }
  110.    fclose(archivomateriales);
  111. }
En línea

magictheory

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: Hola necesito ayuda con este codigo porfavor
« Respuesta #4 en: 31 Octubre 2016, 02:40 am »

Hola mafus, lo copie tal cual en el devc++ y me sigue el bucle infinito.... Que sera que puede ser?
En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Hola necesito ayuda con este codigo porfavor
« Respuesta #5 en: 31 Octubre 2016, 10:20 am »

Si me puedes copiar la salida del tu pantalla desde que ejecutas hasta que empieza a repetir sin control te pordía ayudar mejor.
En línea

magictheory

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: Hola necesito ayuda con este codigo porfavor
« Respuesta #6 en: 31 Octubre 2016, 15:16 pm »

Hola mafus, lo probe en linux con el geany anduvo. Porque sera que con el devc++ no anduvo?
En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Hola necesito ayuda con este codigo porfavor
« Respuesta #7 en: 31 Octubre 2016, 16:08 pm »

Solo tengo linux así que no puedo probar. Copiaras aquí toda la salida de la consola o subieras una imagen de ella hasta que empieza el bucle eterno podría tener una idea de por donde va el flujo.
En línea

magictheory

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: Problema con bucle infinito
« Respuesta #8 en: 1 Noviembre 2016, 12:57 pm »

Hola ahi subi las dos imagenes



 
Una es antes y otra es despues del bucle...
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
probando un bucle infinito... « 1 2 3 »
Bugs y Exploits
mousehack 22 15,484 Último mensaje 28 Agosto 2015, 21:46 pm
por MCKSys Argentina
El que se ha metido en un bucle infinito soy yo...
Programación C/C++
Superplay 0 3,801 Último mensaje 1 Diciembre 2010, 21:14 pm
por Superplay
Implementacion de bucle infinito
Programación C/C++
mark182 3 4,528 Último mensaje 12 Marzo 2011, 11:33 am
por Akai
BATCH - Problema en bucle infinito « 1 2 »
Scripting
llAudioslavell 12 7,190 Último mensaje 21 Septiembre 2016, 19:30 pm
por llAudioslavell
error, bucle infinito, alguien que me ayude a evitar el bucle infinito
Programación C/C++
marcos0204 4 2,524 Último mensaje 27 Marzo 2020, 22:44 pm
por fary
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines