Tengo una función que agrega (o al menos, debería agregar) productos a una "base de datos" en .txt, y cual es parte de un programa tipo caja registradora que estoy desarrollando; el programa recibe el nombre del producto y el precio en float, luego busca con otra función el caracter de salto de linea del nombre de producto introducido y lo elimina para que se vea correcto, después debería colocar el nombre del producto en una base de datos llamada "bdproductos.txt" y el precio en otra llamada "bdprecios.txt", en el renglon siguiente al que ya está ocupado por algún otro nombre, número o texto, después cuenta el número de lineas para saber la ubicación del último registro y lo presenta en pantalla junto con los datos introducidos. El problema es que no funciona así.
Aquí el código en cuestión de la función para agregar productos:
Código C:
Ver original
void agregar_producto(char nuevo_producto_nombre[200], float nuevo_producto_precio) //Función para agregar un nuevo registro (producto) { int nregistros1, nregistros2, nletras1, nletras2; char tempo[200], buffa[50]; nregistros1 = contarlineas(2); nregistros2 = contarlineas(3); nletras1 = contarletras(2,(nregistros1-1)); nletras2 = contarletras(3,(nregistros2-1)); //Coloca el cursor en la última linea, al inicio primero y después mueve el cursor al final de la linea para colocar un final de linea y escribir el registro linea((nregistros1-1),2); linea((nregistros2-1),3); Sleep(10); Sleep(10); Sleep(30); //Escribe el registro Sleep(30); Sleep(20); }
Aca la función contar lineas:
Código C:
Ver original
int contarlineas(int tipo) //Función para contar las lineas, compatible con las 3 bases de datos { int i=0; char tempo[80]; //Se revisa si el archivo está vacío if (tipo == 1) { if (fscanf(fp, tempo) == EOF)//Si el archivo no contiene lineas, el control de programa va a la etiqueta "vacío" goto vacio; } if (tipo == 2) { goto vacio; } if (tipo == 3) { goto vacio; } //Si es del documento 1 if (tipo == 1) { do { i++; } //Si es del documento 2 if (tipo == 2) { do { i++; } //Si es del documento 3 if (tipo == 3) { do { i++; } vacio: return i; }
Acá la función para contar letras
Código C:
Ver original
int contarletras(int tipo, int lineaobjetivo) { char tempo[500]; int i=0; if (tipo == 1) { linea(lineaobjetivo,1); goto nada; } if (tipo == 2) { linea(lineaobjetivo,2); goto nada; } if (tipo == 3) { linea(lineaobjetivo,3); goto nada; } nada: return i; }
Acá la función para ubicar el cursor en una linea específica
Código C:
Ver original
void linea(int num, int ndocumento) //Función para colocar el cursor en un renglon específico (indicado por int num), del documento indicado (indicado por int ndocumento) { //Si el documento es del tipo 1 if (ndocumento == 1) { int conta=num-1; inicho: if (conta>0) { conta--; goto inicho; } } //Si el documento es del tipo 2 if (ndocumento == 2) { int conta=num-1; inicho2: if (conta>0) { conta--; goto inicho2; } } //Si el documento es del tipo 3 if (ndocumento == 3) { int conta=num-1; inicho3: if (conta>0) { conta--; goto inicho3; } } //Si el documento es del tipo 4 (El documento temporal, para la función reemplazar) if (ndocumento == 4) { int conta=num-1; inicho4: if (conta>0) { conta--; goto inicho4; } } }
Acá la función para "limpiar" una cadena de los saltos de linea
Código C:
Ver original
char *limpiar (char cadena[200]) //Función para limpiar palabras o cadenas de saltos de linea (\n) { char tempo[200]; for(i=0;i<letras; i++) { if (cadena[i] != '\n') tempo[i] = cadena[i]; } tempo[i+1] = '\0'; cadena = tempo; return cadena; }
Y por último, las variables globales, por si es que:
Código C:
Ver original
int producto_clave, respuesta, registros, tempomultin; float nuevo_producto_precio; char nombre_negocio[300], tiempos[128], direccion[300], propietario[300], nuevo_producto_nombre[200], nuevo_producto_nombre1[200], tempomulti[200];
¿Podría alguien checar el código y ver en que la he cajeteado?
Gracias de antemano