Hola! El uso de goto si bien no esta prohibido no es recomendable utilizarlo ya que no respeta la forma estructurada de un programa, es de mala practica usarlo
La verdad sin ofenderte no entendi casi nada tu programa va de echo no me dio muchas ganas de analizarlo, pero vi algunas cosas como: ¿xq haces fclose(fp2); y fclose(fp3); antes de abrir los archivos?
En este pedazo de codigo:
Primero con sprintf guardas nuevo_producto_precio con formato en buffa, luego con fputs lo mandas al achivo fp3
pero despues volves a hacer lo mismo con fprintf¿para que lo guadas dos veces?
Otra cosa que haces es "limpiar" el salto de linea de una cadena pero luego vos haces un fputc('\n', fp2); o fputc('\n', fp3); para guardarle el salto de linea en el archivo¿no es mejor dejarle el salto de linea a la cadena??? Te ahorrarias una funcion
Como no se todos los errores q tenes, te dejo un programa simple que hace mas o menos todo lo que detallas en el enunciado. No utiliza variables globales ya que no me gusta
Código C:
Ver original#include <stdio.h>
#include <string.h>
void agregar_producto(FILE *fp1,FILE *fp2,char nuevo_producto_nombre[], float nuevo_producto_precio); //Función para agregar un nuevo registro (producto)
int ultimoRegistro(FILE *fp1,FILE *fp2,char nuevo_producto_nombre[], float *nuevo_producto_precio);
int main(void)
{
FILE *fp1,*fp2;
char nuevo_producto_nombre[30];
float nuevo_producto_precio;
int lineas;
char ch;
/* abro los archivos para añadir; los cursores se posicionan al final del archivo
De esta forma evito utilizar fseek para mover el cursor al final */
fp1
= fopen("bdproductos.txt","a+"); fp2
= fopen("bdprecios.txt", "a+");
do {
printf("Ingrese el nombre del producto\n"); scanf("%s",nuevo_producto_nombre
); printf("Ingrese el precio del producto\n"); scanf("%f",&nuevo_producto_precio
);
agregar_producto(fp1,fp2,nuevo_producto_nombre,nuevo_producto_precio);
printf("Desea seguir ingresando registros(S/N)\n"); }while(ch=='S' || ch=='s');
/* si se crean dos archivos con nombre y precio del producto se supone que se ingresan
las mismas cantidades de lineas */
lineas=ultimoRegistro(fp1,fp2,nuevo_producto_nombre,&nuevo_producto_precio); /* paso la direccion de nuevo_producto_precio para modificarlo en la funcion */
printf("Cantidad de registros: %d\n",lineas
); printf("Ultimo registro: nombre %s\tprecio %f\n\n",nuevo_producto_nombre
,nuevo_producto_precio
);
/* cierre de los archivos */
/* si estas compilando en linux comenta el system */
return 0;
}
void agregar_producto(FILE *fp1, FILE *fp2,char nuevo_producto_nombre[], float nuevo_producto_precio)
{
fprintf(fp1
,"%s\n",nuevo_producto_nombre
); fprintf(fp2
,"%f\n",nuevo_producto_precio
);
return;
}
/* esta funcion es para saber cual es el ultimo registro */
int ultimoRegistro(FILE *fp1,FILE *fp2,char nuevo_producto_nombre[], float *nuevo_producto_precio)
{
int i=0;
int j=0;
fscanf(fp1
,"%s",nuevo_producto_nombre
); {
fscanf(fp1
,"%s",nuevo_producto_nombre
); i++;
}
fscanf(fp2
,"%f",&(*nuevo_producto_precio
)); {
fscanf(fp2
,"%f",&(*nuevo_producto_precio
)); j++;
}
if(i==j) return i; /* hay las mismas lineas en los archivos */
return -1; /* hubo algun error en los datos de los archivos */
}
Saludos
PD: un consejo volve a hacer tu programa paso x paso y en lo posible evita el goto