elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Programa C estructura switch.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Programa C estructura switch.  (Leído 2,503 veces)
Chetero

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Programa C estructura switch.
« en: 17 Junio 2014, 18:39 pm »

El programa en cuestión es este:
http://gyazo.com/9100e1eabb55b59b4d50adfc6f436e7e


Tengo la estructura en general aunque ando bastante perdido en como hacer que el programa me cambie la fecha de la recolección y la ultima cantidad recolectada la cambie y la sume a la cantidad recolectada desde la plantación.

Os voy a dejar el problema entero,rodeando las partes en las que no se como hacerlas funcionar con ??????.Espero que podáis arrojarme algo de luz.

Código:
#include <stdio.h>
#include <stdlib.h>

typedef char texto10[10];
typedef char texto20[20];

typedef struct{
        int dia;
        int mes;
        int anno;
        } fecha;

typedef struct{
        texto10 codigo;
        texto20 nombre;
        fecha plant_fecha;
        fecha rec_fecha;
        float cantidadrec;
        float cantidadacc;
        } cultivo;





char menu (void);
void datos_cultivo(cultivo *cult);
int leer_num(int c);
void modif_nombre(texto20 nom);
/*??????????????????????????????????????????????????*/
void recolectar (int recfecha,float cantidadr);
/*??????????????????????????????????????????????????*/
void imprime (cultivo *cult);


int main (void)

{
    cultivo catalogo[14];
    char opcion;
    int numero, control = -1;
   
    do
    {
        opcion=menu();
        switch (opcion)
        {
               case 'a':if (control < 14){
                    control++;
                    datos_cultivo(&catalogo[control]);
                    }
                    else
                    printf("Catalogo completo no se pueden introducir más datos\n");
                    break;
               case 'b':if (control != -1){
                    numero=leer_num(control);
                    modif_nombre(catalogo[numero].nombre);
                    }
                    else
                    printf("No se puede modificar pues no se han introducido datos\n");
                    break;
                    /*??????????????????????????????????????????????????*/
               case 'c':if (control != -1){
                    numero=leer_num(control);
                    recolectar(catalogo[numero].rec_fecha);
                    }
                    else
                    printf("No se puede modificar la fecha pues no se han introducido datos\n");
                    break;
                    /*??????????????????????????????????????????????????*/
               case 'e':if (control != -1){
                    numero=leer_num(control);
                    imprime(catalogo[numero]);
                    }
                    else
                    prinft("No se pueden mostrar los datos pues no se han introducido\n");
                    break;
               case 'f': printf ("Fin del programa\n");
                         system("PAUSE");
                         break;
               default: printf("Opcion incorrecta\n");
        };
       
}while (opcion != 'f');

return (0);

}




char menu (void)
{
     char op;
     
     printf("Pulsa a para leer los datos del cultivo\n");
     printf("Pulsa b para modificar el nombre al cultivo\n");
     printf("Pulsa c para modificar la fecha de la ultima recoleccion\n");
     printf("Pulsa d para modificar la cantidad de kilos recogidos en la ultima recoleccion\n");
     printf("Pulsa e para mostrar los datos del cultivo\n");
     printf("Pulsa f para terminar\n");
     scanf("%c",&op);
     fflush(stdin);
     return (op);
     }
     
     void datos_cultivo(cultivo *cult)
     
     {
          printf("Dame el codigo: ");
          gets((*cult).codigo);
          fflush(stdin);
          printf("Dame el nombre: ");
          gets((*cult).nombre);
          fflush(stdin);
          printf("Dame los kilos recogidos en la ultima recoleccion: ");
          scanf("%f", &((*cult).cantidadrec));
          fflush(stdin);
          printf("Dame los kilos recogidos desde la plantacion: ");
          scanf("%f", &((*cult).cantidadacc));
          fflush(stdin);
          printf("Dame el año de plantacion: ");
          scanf("%d", &((*cult).plant_fecha));
          fflush(stdin);
          printf("Dame el año de recolecion: ");
          scanf("%d", &((*cult).rec_fecha));
          fflush(stdin);
         
         
     }
     
     int leer_num(int c)
     
     {
         int num;
         do {
             printf("Dame el numero de finca entre 0 y %d: ",c);
             scanf("%d", &num);
             fflush(stdin);
             }
         while ((num<0)||(num>c));
         
         return(num);
         
     }
         
     void modif_nombre(texto20 nom)
     
     {
          printf("La finca %s va a cambiar de nombre.\n", nom);
          printf("Dame el nuevo nombre: ");
          gets(nom);
          fflush(stdin);
         
     }
     /*??????????????????????????????????????????????????*/
     void recolectar (int recfecha,float cantidadr)
     
     {
         printf("La fecha antigua de recolecion es: %d\n", recfecha);
         printf("Dame la nueva fecha: ");
         scanf("%d", &recfecha);
         fflush(stdin);
         printf("La cantidad de kilos recogidad en la ultima recolecion es: %f\n", cantidadr);
         scanf("%f", &cantidadr);
         fflush(stdin);
         
         
     }
     /*??????????????????????????????????????????????????*/
   
     
     void imprime (cultivo *cult)
     
     {
          printf("El codigo del invernadero es: %s\n",cult.codigo);
          printf("El nombre del cultivo es: %s\n",cult.nombre);
          printf("La cantidad de kilos recogidos en la ultima recolecion es: %f\n",cult.cantidadrec);
          printf("La cantidad de kilos recogidos desde la plantacion es: %f\n",cult.cantidadacc);
          printf("La fecha de recolecion es: %d\n",cult.rec_fecha);
          printf("La fecha de plantacion es: %d\n",cult.plant_fecha);
          system("PAUSE");
         
     }

He intentado cambiar el void recolectar.Pero en la estructura switch me salta error cuando intento insertar un caso con el modif_recfecha.

Código:
char menu (void);
void datos_cultivo(cultivo *cult);
int leer_num(int c);
void modif_nombre(texto20 nom);
int modif_recfecha(int fechare);
float modif_cantidadr(float cantidadrecol);
void imprime (cultivo *cult);

Pero en la estructura switch me salta error cuando intento insertar un caso con el modif_recfecha.


Código:
 case 'c':if (control != -1){
                    numero=leer_num(control);
                    modif_recfecha(catalogo[numero].rec_fecha);
                    }
                    else
                    printf("No se puede modificar la fecha pues no se han introducido datos\n");
                    break;



Gracias de antemano por las molestias.


En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Programa C estructura switch.
« Respuesta #1 en: 18 Junio 2014, 08:47 am »

"recolectar" puede tener, básicamente, dos versiones diferentes:

  • Recibe la fecha de recolección y la cantidad recolectada
  • Recibe un puntero de tipo "cultivo"

Si optas por la primera opción, la fecha de recolección debe ser de tipo "fecha" ya que es el tipo que empleas para almacenar las fechas. Además, dado que pretendes modificarlo dentro de la función, debería ser un puntero. Además, presupongo que la "cantidad recolectada" debería inicializarse a 0 una vez has recolectado, cierto? en tal caso este parámetro también debería ser un puntero.

Si optas por la segunda opción, la función únicamente recibirá un parámetro que, por ser puntero, te permitirá modificar su contenido alegremente sin problemas.

Versión 1:

Código
  1. void recolectar ( fecha* recfecha, float* cantidadr);

Versión 2:

Código
  1. void recolectar( cultivo* datoscultivo );

El contenido de la función imagino que sabrás adaptarlo correctamente.

Un saludo.


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Programa estaciones (cambio de if-else por switch)
Programación C/C++
jamatbar 5 35,243 Último mensaje 2 Mayo 2019, 23:07 pm
por ceded
no puedo compilar programa en c++ usando switch.
Programación C/C++
maxiilius 2 2,804 Último mensaje 8 Octubre 2012, 23:23 pm
por maxiilius
problema con un programa de estructura de datos
Programación C/C++
windic 3 2,286 Último mensaje 10 Enero 2014, 18:00 pm
por windic
Estructura switch¿?
Programación C/C++
lucas59 3 1,923 Último mensaje 4 Agosto 2014, 13:36 pm
por leosansan
Programa en C++ estructura de control
Programación C/C++
asteron 1 1,992 Último mensaje 30 Marzo 2022, 19:30 pm
por Eternal Idol
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines