Hola Jeremias,
En base a tu codigo, mando la solucion, implemente ademas el lector de la Base De Datos, y usa fichero tipo .txt.
Que falta? pues control de excepciones como ser: que pasara si el sistema me pide un entero y yo le paso un caracter?, bueno esos detalles, espero te guste la solucion.
Nota: A mi me funciona y no me muestra nada de signos.
Creo que con esto termino mi participacion en ese hilo :|
===========================================================
#include <stdio.h>
#include <stdlib.h>
struct articulo{
char nombre[50];
int codigo;
float precio;
};
char* enteroAcadena(int val, int base){
static char buf[32] = {0};
int i = 30;
for(; val && i ; --i, val /= base)
buf[i] = "0123456789abcdef"[val % base];
return &buf[i+1];
}
void mostrarDatos(struct articulo a){
printf("DETALLE ARTICULO: n");
printf("Nombre: %sn",a.nombre);
printf("Codigo: %dn",a.codigo);
printf("Precio: %.2fn", a.precio);
}
void guardarDatos(struct articulo a){
FILE *auxf = fopen("baseDeDatos.txt","a");
fputs(a.nombre, auxf);
fputs(" ", auxf);
fputs(enteroAcadena(a.codigo,10),auxf);
fputs(" ", auxf);
char aux[50];
sprintf(aux,"%.2f",a.precio);
fputs(aux, auxf);
fputs("n", auxf);
printf("Guardado Correctamente :) n");
fclose(auxf);
}
struct articulo leerArticulo(){
struct articulo algo;
printf("nNombre: ");
fgets(algo.nombre,50,stdin);
scanf("%s", (char*)&algo.nombre);
printf("nCodigo: ");
scanf("%d",&algo.codigo);
printf("nPrecio: ");
scanf("%f",&algo.precio);
return algo;
}
int menu(){
//system("clear"); //linux
clrscr(); //windows
printf("========================n");
printf("1. Ingresar Producto.n");
printf("2. Leer Lista.n");
printf("3. Salir.n");
printf("========================n");
printf("Ingrese su opcion[1/2/3]_ ");
int opcion;
scanf("%d",&opcion);
return opcion;
}
void leerBaseDeDatos(){
FILE *aux;
if((aux = fopen("baseDeDatos.txt","r")) == NULL){
//me salgo sin hacer nada :) si no existe BD
return;
}
char cadena[80];
fgets(cadena,60,aux);
do{
printf("%sn",cadena);
}while(fgets(cadena,80,aux)!=NULL);
int uno;
printf("nPresione 1 y luego Enter para volver al menu.");
scanf("%d", &uno);
fclose(aux);
}
void acciones(int opcion){
//system("clear"); //linux
clrscr(); //windows
struct articulo nuevo;
switch(opcion){
case 1: nuevo = leerArticulo();
guardarDatos(nuevo);
break;
case 2: leerBaseDeDatos(); break;
case 3: exit(0); break;
default: break;
}
}
int main(){
int bandera;
while(1){
bandera = menu();
acciones(bandera);
}
return 0;
}
================================================
Espero te sirva.
Atte: Roberto