• Sábado 27 de Abril de 2024, 02:32

Autor Tema:  Algo Falla  (Leído 1508 veces)

antiheroes

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Algo Falla
« en: Martes 12 de Junio de 2007, 20:23 »
0
Lo primero de todo pedir disculpas, por el otro tema que abrí, y segundo haber si ahora podeis ayudarme a encontrar donde he cometido los errores.

He empezado a hacer el ejercicio que os había comentado basándome en otro ejercicio similar que hice hacce tiempo, pero no acaba de funcionar.

#include <stdio.h>
#include <string.h>

struct sstock  
{
        char codigo_producto [4];
        char descripcion_producto [20];
        int stock_actual;
        float valor;                                                                                                                  
};    

void entrar_stock(struct sstock astock[4])
{
    int i;
    for(i=0;i<4;i++)
    {
        printf("\n\nIntroduce el producto [%d]",i);
        printf("\nCodigo_producto:"); scanf("%s",astock.codigo_producto);
        printf("\nDescripcion_producto:"); scanf("%s",astock.descripcion_producto);
        printf("\nStock_actual:"); scanf("%d",&astock.stock_actual);
        printf("\nValor:"); scanf("%f",&astock.valor);
    }    
}

void buscar_stock(struct sstock astock[4], char *codigo_producto)
{
    int i;
    for(i=0;i<4;i++)
      if (strcmp(astock.codigo_producto,codigo_producto)==0)
            {
                printf("\n\nProducto: [%d]",i);
                printf("\nCodigo_producto: %s",astock.codigo_producto);
                printf("\nDescripcion_producto: %s",astock.descripcion_producto);
                printf("\nStock_actual: %d",astock.stock_actual);
                printf("\nValor: %f",astock.valor);
            }    
}

void imp_stock(struct sstock astock[4])
{
    int i;
    for(i=0;i<4;i++)
    {
        printf("\n\nProducto: [%d]",i);
        printf("\nCodigo_producto: %s",astock.codigo_producto);
        printf("\nDescripcion_producto: %s",astock.descripcion_producto);
        printf("\nStock_actual: %d",astock.stock_actual);
        printf("\nValor: %f",astock.valor);
    }    
}

void ordenar_stock(struct sstock astock[4])
{
    int i,j;
    struct sstock tstock;
   
    for(i=0;i<4-1;i++)
        for(j=i+1;j<4;j++)
                if (strcmp(astock.codigo_producto,astock[j].codigo_producto)>0)
                {
                     strcpy(tstock.codigo_producto,astock.codigo_producto);
                     strcpy(tstock.descripcion_producto,astock.descripcion_producto);
                     tstock.stock_actual=astock.stock_actual;
                     tstock.valor=astock.valor;
                     
                     strcpy(astock.codigo_producto,astock[j].codigo_producto);
                     strcpy(astock.descripcion_producto,astock[j].descripcion_producto);
                     astock.stock_actual=astock[j].stock_actual;
                     astock.valor=astock[j].valor;
                     
                     strcpy(astock.codigo_producto,tstock.codigo_producto);
                     strcpy(astock.descripcion_producto,tstock.descripcion_producto);
                     astock.stock_actual=tstock.stock_actual;
                     astock.valor= tstock.valor;
             
                }    
         
}
main()
{
    struct sstock astock[4];
    int opcion;
    char codigo_producto[4];
   
    do
    {
                do
                {
                        printf("\n 1- Entrar stock");
                        printf("\n 2- Buscar stock");
                        printf("\n 3- Listar stock");
                        printf("\n 4- Salir\n");
                        printf("Opcion:");
                        scanf("%d",&opcion);
                } while (opcion<1 || opcion>4);  
                 
                switch(opcion)
                {
                        case 1: entrar_stock(astock);
                            break;
                        case 2:
                                printf("Introduce el codigo_producto a buscar:");
                                scanf("%s",codigo_producto);
                                buscar_stock(astock,codigo_producto);
                                getche();
                             break;
                        case 3:
                            imp_stock(astock);
                            ordenar_stock(astock);  
                            break;
                        case 4: exit(1);
                            break;
                 }    
                getch();
  } while (1);      
}

El fallo es que escoja la opción del menú que escoja siempre me pide que introduzca los datos.

Una pregunta, como puedo guardar los productos en un fichero?

TRod

  • Miembro MUY activo
  • ***
  • Mensajes: 108
  • Nacionalidad: mx
    • Ver Perfil
Re: Algo Falla
« Respuesta #1 en: Martes 12 de Junio de 2007, 22:38 »
0
Tengo una duda:
¿La funcion imp_stock(struct sstock astock[4]) la usas para sólo listar productos?     ¿entonces para que pones de nuevo scanf()?
Me parece que es un copy-paste de la funcion entrar_stock...

antiheroes

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Algo Falla
« Respuesta #2 en: Miércoles 13 de Junio de 2007, 02:18 »
0
El copy-paste lo hice para reducir tiempo, pero lo hice en el sitio equivocado, gracias a eso he encontrado el error, donde todo el rato me pedía que introdujese los datos, ahora eso ya esta solucionado.
Gracias.

En cuanto al orden me gustaría hacerlo mediante "codigo_producto" o "stock_actual", pero el único orden que me sale es en el que introduzco los datos.
Intento utilizar una función como la de "buscar_stock", pero me da error, no se como hacerlo.

TRod

  • Miembro MUY activo
  • ***
  • Mensajes: 108
  • Nacionalidad: mx
    • Ver Perfil
Re: Algo Falla
« Respuesta #3 en: Miércoles 13 de Junio de 2007, 03:59 »
0
Creo que tienes que hechar mano de los Benditos Apuntadores.  ;)
y la clasica funcion de intercambio:
void swap_stock(struct sstock *A, struct sstock *B ){
 struct sstock aux;
 aux = *A;     //Te ahorraste algunos 'strcpy'
 *A = *B;
 *B = aux;
}


Y la metes en tu funcion de ordenamiento:
...
  if (strcmp(astock.codigo_producto,astock[j].codigo_producto)>0)
    swap_stock(&astock,&astock[j]);


Te confieso que no comprendo a primer vista porque no funciona tu metodo, pero lo anterior es lo que haria casi cualquier programador que esta aprendiendo metodos de ordenamiento...
Espero haberte ayudado. Suerte.

antiheroes

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Algo Falla
« Respuesta #4 en: Miércoles 13 de Junio de 2007, 22:35 »
0
Dejando de lado el tema del ordenado, creo que no importa mucho.
Para terminar el ejercicio me falta guardar la estructura en un fichero, ya te digo que no se muy bien como funcionan, por ahora he hecho esto, pero lo único que hace es crear el fichero, pero sin escribir nada en su interior.

void guardar_stock(struct sstock astock[4])
{
    FILE* fichero;
    struct sstock stock;
    fichero=fopen("stock.txt", "w");
      if(fichero==NULL)
      printf("ERROR: No se ha podido abrir el fichero");
    else
    {
    fwrite(&stock,sizeof(stock),1,fichero);    
    fclose(fichero);
    }    
}
Como ya os digo, no se me dan muy bien os ficheros.
Me podéis ayudar?

TRod

  • Miembro MUY activo
  • ***
  • Mensajes: 108
  • Nacionalidad: mx
    • Ver Perfil
Re: Algo Falla
« Respuesta #5 en: Jueves 14 de Junio de 2007, 16:29 »
0
El error esta en fwrite(&stock, ...
'stock' no tiene nada mas que basura, nada que ver con lo que se quiere guardar.

antiheroes

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Algo Falla
« Respuesta #6 en: Viernes 15 de Junio de 2007, 13:22 »
0
Gracias por tu ayuda TRod.
Creo que al final he podido acabar el ejercicio, de una forma muy simple me parece pero me sale bien, almenos eso creo.
Este es el resultado final:

#include <stdio.h>
#include <string.h>

struct sstock  
{
        char codigo_producto [4];
        char descripcion_producto [20];
        int stock_actual;
        float valor;                                                                                                                  
};    

void entrar_stock(struct sstock astock[4])
{
    int i;
    for(i=0;i<4;i++)
    {
        printf("\n\nIntroduce el producto [%d]",i);
        printf("\nCodigo_producto:"); scanf("%s",astock.codigo_producto);
        printf("\nDescripcion_producto:"); scanf("%s",astock.descripcion_producto);
        printf("\nStock_actual:"); scanf("%d",&astock.stock_actual);
        printf("\nValor:"); scanf("%f",&astock.valor);
    }    
}

void buscar_stock(struct sstock astock[4], char *codigo_producto)
{
    int i;
    for(i=0;i<4;i++)
      if (strcmp(astock.codigo_producto,codigo_producto)==0)
            {
                printf("\n\nProducto: [%d]",i);
                printf("\nCodigo_producto: %s",astock.codigo_producto);
                printf("\nDescripcion_producto: %s",astock.descripcion_producto);
                printf("\nStock_actual: %d",astock.stock_actual);
                printf("\nValor: %f",astock.valor);
            }    
}

void mostrar_stock(struct sstock astock[4])      
{
    int i;
    for(i=0;i<4;i++)
    {
        printf("\n\nProducto: [%d]",i);
        printf("\nCodigo_producto: %s",astock.codigo_producto);
        printf("\nDescripcion_producto: %s",astock.descripcion_producto);
        printf("\nStock_actual: %d",astock.stock_actual);
        printf("\nValor: %f",astock.valor);
    }    
}

void ordenar_stock(struct sstock astock[4])
{
    int i,j;
    struct sstock tstock;
   
    for(i=0;i<=4-1;i++)
        for(j=4;j>=i+1;j--)
                if (strcmp(astock.codigo_producto,astock[j].codigo_producto)>0)

                {
                     strcpy(tstock.codigo_producto,astock.codigo_producto);
                     strcpy(tstock.descripcion_producto,astock.descripcion_producto);
                     tstock.stock_actual=astock.stock_actual;
                     tstock.valor=astock.valor;
                     
                     strcpy(astock.codigo_producto,astock[j].codigo_producto);
                     strcpy(astock.descripcion_producto,astock[j].descripcion_producto);
                     astock.stock_actual=astock[j].stock_actual;
                     astock.valor=astock[j].valor;
                     
                     strcpy(astock[j].codigo_producto,tstock.codigo_producto);
                     strcpy(astock[j].descripcion_producto,tstock.descripcion_producto);
                     astock[j].stock_actual=tstock.stock_actual;
                     astock[j].valor= tstock.valor;
             
                }    
         
}

void guardar_stock(struct sstock astock[4])
{
    FILE *fichero;
    int i;
    fichero=fopen("stock.txt","w");
   
    if(fichero == NULL)
    {
        printf("\nError..");
        return;
    }    
     for(i=0;i<4;i++)
    {
    fprintf(fichero,"\n\nProducto: [%d]",i);
    fprintf(fichero,"\nCodigo_producto: %s",astock.codigo_producto);
    fprintf(fichero,"\nDescripcion_producto: %s",astock.descripcion_producto);
    fprintf(fichero,"\nStock_actual: %d",astock.stock_actual);
    fprintf(fichero,"\nValor: %2.f",astock.valor);
    }    
    fclose(fichero);
}

main()
{
    struct sstock astock[4];
    int opcion;
    char codigo_producto[4];
   
                   
    do
    {
                do
                {
                        printf("\n 1- Entrar stock");
                        printf("\n 2- Buscar stock");
                        printf("\n 3- Listar stock");
                        printf("\n 4- Guardar en fichero");
                        printf("\n 5- Salir\n");
                        printf("Opcion:");
                        scanf("%d",&opcion);
                } while (opcion<1 || opcion>5);  
                 
                switch(opcion)
                {
                        case 1: entrar_stock(astock);
                            break;
                        case 2:
                                printf("Introduce el codigo_producto a buscar:");
                                scanf("%s",codigo_producto);
                                buscar_stock(astock,codigo_producto);
                                getche();
                             break;
                        case 3:
                             ordenar_stock(astock);  
                             mostrar_stock(astock);
                             break;
                       case 4:
                            guardar_stock(astock);
                            break;
                        case 5: exit(1);
                            break;
                 }    
                getch();
    } while (1);      
}