0 votos
por (3.2k puntos) en C/C++
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 &amp;&amp; i ; --i, val /= base)

        buf[i] = "0123456789abcdef"[val % base];

    return &amp;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*)&amp;algo.nombre);

    printf("nCodigo: ");

    scanf("%d",&amp;algo.codigo);

    printf("nPrecio: ");

    scanf("%f",&amp;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",&amp;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", &amp;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


1 Respuesta

0 votos
por (3.2k puntos)
Una correccion,

en la funcion:

struct articulo leerArticulo(){ }

por favor quita la siguiente linea de codigo:

fgets(algo.nombre,50,stdin);

//estaba alli para ayudarme en linux, pero como usas win no sera necesario.


Preguntas relacionadas

0 votos
25 respuestas
0 votos
6 respuestas
0 votos
0 respuestas
0 votos
3 respuestas
Bienvenido a Dudas de Programación, donde puedes hacer preguntas y recibir respuestas sobre los problemas más frecuentes de los lenguajes de programación, frameworks de desarrollo y bases de datos que utilices. Foro de Línea de Código

Categorías

...