Autor
|
Tema: Problema con bucle infinito (Leído 3,746 veces)
|
magictheory
Desconectado
Mensajes: 5
|
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: #include <stdio.h> #include <stdlib.h> #include <string.h> struct materiales{ int codart, stock, stockmin; char desc[20]; float precio; }; struct ventas{ int cod,cant; }; //ACA YO CARGO EL ARCHIVO AMTERIALES main(){ FILE *materiales; FILE *archivoventa; fpos_t pos; int op; struct materiales mat; struct ventas ven; if((materiales =fopen("materiales.dat","wb"))!=NULL ){ do{ printf("\n\tIngrese el codigo del articulo"); scanf("%d", &mat. codart); printf("\n\tIngrese un breve descripcion"); printf("\n\tIngrese stock actual del articulo"); printf("\n\tIngrese stock minimo"); scanf("%d", &mat. stockmin); printf("\n\tPor utimo ingrese precio"); scanf("%f", &mat. precio); fwrite(&mat ,sizeof(mat ),1,materiales ); printf("\n\t¿Desea ingresar otro articulo? [1]-para SI // [0]-Para NO"); }while(op!=0); }else{ printf("\n\nError de archivo"); } //ACA YO CARGO EL ARCHIVO VENTAS int opc; if((archivoventa =fopen("ventas.dat","wb"))!=NULL ){ do{ printf("\n\tIngrese codigo del articulo"); printf("\n\tIngrese cantidad vendida del articulo"); fwrite(&ven ,sizeof(ven ),1,archivoventa ); printf("\n\t¿Desea registrar otra venta? [1]-Para SI // [0]-Para NO"); }while(opc!=0); }else{ } //ACA ES DONDE ESTA LA FALLA if((archivoventa =fopen("ventas.dat","rb"))!=NULL ){ if((materiales =fopen("materiales.dat","r+b"))!=NULL ){ fread(&ven ,sizeof(ven ),1,archivoventa ); while(!feof(archivoventa )){ fread(&mat ,sizeof(mat ),1,materiales ); while(!feof(materiales )){ if(mat.codart==ven.cod){ mat.stock=mat.stock-ven.cant; printf("\n\nEl stock entonces quedo en %d", mat. stock); fseek(materiales , -1*(sizeof(mat )),SEEK_CUR ); fwrite(&mat ,sizeof(mat ),1,materiales ); } fread(&mat ,sizeof(mat ),1,materiales ); } fread(&ven ,sizeof(ven ),1,archivoventa ); } }else{ } }else{ } if((materiales =fopen("materiales.dat","rb"))!=NULL ){ fread(&mat ,sizeof(mat ),1,materiales ); while(!feof(materiales )){ printf("\n\nEl codigo de articulo es %d",mat. codart); printf("\n\nEl stock actualizado quedo asi %d",mat. stock); fread(&mat ,sizeof(mat ),1,materiales ); } }else{ } }
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
Mensajes: 1.603
|
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 // Ingrese codigo del articulo1 Ingrese cantidad vendida del articulo6 ¿Desea registrar otra venta? [1]-Para SI // 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
Mensajes: 5
|
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
Mensajes: 1.603
|
Eso y el gets por fgets para prevenir desbordamiento de buffer. Aquí el código modificado: #include <stdio.h> #include <stdlib.h> #include <string.h> struct materiales{ int codart, stock, stockmin; char desc[20]; float precio; }; struct ventas{ int cod,cant; }; //ACA YO CARGO EL ARCHIVO AMTERIALES int main() { FILE *archivomateriales; FILE *archivoventa; int op; struct materiales mat; struct ventas ven; if((archivomateriales =fopen("materiales.dat","wb")) != NULL ) { do { printf("\n\tIngrese el codigo del articulo"); scanf("%d", &mat. codart); printf("\n\tIngrese un breve descripcion"); fgets(mat. desc, 20, stdin ); printf("\n\tIngrese stock actual del articulo"); printf("\n\tIngrese stock minimo"); scanf("%d", &mat. stockmin); printf("\n\tPor utimo ingrese precio"); scanf("%f", &mat. precio); fwrite(&mat , sizeof(mat ), 1, archivomateriales ); printf("\n\t¿Desea ingresar otro articulo? [1]-Para SI // [0]-Para NO"); } while(op != 0); } else { printf("\n\nError de archivo"); } //ACA YO CARGO EL ARCHIVO VENTAS int opc; if((archivoventa =fopen("ventas.dat","wb")) != NULL ) { do{ printf("\n\tIngrese codigo del articulo"); printf("\n\tIngrese cantidad vendida del articulo"); fwrite(&ven ,sizeof(ven ),1,archivoventa ); printf("\n\t¿Desea registrar otra venta? [1]-Para SI // [0]-Para NO"); } while(opc!=0); } else { } //ACA ES DONDE ESTA LA FALLA if((archivoventa =fopen("ventas.dat","rb")) != NULL ) { if((archivomateriales =fopen("materiales.dat","r+b")) != NULL ) { fread(&ven , sizeof(ven ), 1, archivoventa ); while(!feof(archivoventa )) { fread(&mat , sizeof(mat ), 1, archivomateriales ); while(!feof(archivomateriales )) { if(mat.codart == ven.cod) { mat.stock = mat.stock-ven.cant; printf("\n\nEl stock entonces quedo en %d", mat. stock); fseek(archivomateriales , -1*(sizeof(mat )),SEEK_CUR ); fwrite(&mat ,sizeof(mat ), 1, archivomateriales ); } fread(&mat , sizeof(mat ), 1, archivomateriales ); } fread(&ven ,sizeof(ven ),1,archivoventa ); } } else { } } else { } if((archivomateriales =fopen("materiales.dat","rb")) != NULL ){ fread(&mat , sizeof(mat ), 1, archivomateriales ); while(!feof(archivomateriales )) { printf("\n\nEl codigo de articulo es %d", mat. codart); printf("\n\nEl stock actualizado quedo asi %d", mat. stock); fread(&mat , sizeof(mat ), 1, archivomateriales ); } } else { } }
|
|
|
En línea
|
|
|
|
magictheory
Desconectado
Mensajes: 5
|
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
Mensajes: 1.603
|
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
Mensajes: 5
|
Hola mafus, lo probe en linux con el geany anduvo. Porque sera que con el devc++ no anduvo?
|
|
|
En línea
|
|
|
|
MAFUS
Desconectado
Mensajes: 1.603
|
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
Mensajes: 5
|
Hola ahi subi las dos imagenes  Una es antes y otra es despues del bucle...
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
probando un bucle infinito...
« 1 2 3 »
Bugs y Exploits
|
mousehack
|
22
|
16,901
|
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
|
4,114
|
1 Diciembre 2010, 21:14 pm
por Superplay
|
|
|
Implementacion de bucle infinito
Programación C/C++
|
mark182
|
3
|
4,963
|
12 Marzo 2011, 11:33 am
por Akai
|
|
|
BATCH - Problema en bucle infinito
« 1 2 »
Scripting
|
llAudioslavell
|
12
|
8,319
|
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
|
3,097
|
27 Marzo 2020, 22:44 pm
por fary
|
|