Ayuda con codigo C++

Iniciado por rjobel, 6 Abril 2011, 02:00 AM

0 Miembros y 2 Visitantes están viendo este tema.

rjobel

Gracias por la observacion Akai.

Modifiqué le código y ahora no compila. Se traba en la declaración de las funciones.

¿Alguna idea de cual sea el problema?

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>


/*Declaracion de Variables*/
       struct prod{
              char nomProd[30];
              char fecha[10];
              char categoria[20];
              float costo;
              } prod[50];/*Arreglo de tipo estructura*/
             
             
              int entrada(void);
              int buscar(void);
              int precio(void);
              int salir(void);
       
       main()
       {
             int c=0, opc, clave;
             
             do{
              printf ("Abarrotes Bel-Yes - Registro de Productos \n\n");
              printf ("Opciones \n");
              printf ("1) Registrar producto \n");
              printf ("2) Buscar producto \n");
              printf ("3) Precio de venta \n");
              printf ("4) Salir \n\n");
              printf ("Elige una opcion: \n");
              scanf ("%d", &opc);
             
                                         
                   switch (opc){      /*Opciones*/
                     case 1:
                          entrada();
                          break;
                     case 2:
                          buscar();
                          break;
                     case 3:
                          precio();
                          break; 
                     case 4:
                          salir();     
                     default:
                              printf ("Esa es una opcion invalida \n");
                              return 0;
                              break;                               
                          }
              while (opc!=4);
                     }         
                   
       /*Declaracion de Funciones*/

      int entrada()
       {
           int c=0;
           
            if (c>=50)
                          printf ("No hay espacio para mas productos en el abarrotes \n");
                          else {
                               printf ("Ingresa los datos del producto \n");
                               printf ("Clave %.2d \n", c);
                               printf ("Nombre del Producto: ");
                               fflush (stdin);
                               gets (prod[c].nomProd);
                               printf ("Fecha de Entrada[dd/mm/aa]: ");
                               gets (prod[c].fecha);
                               printf ("Categoria del Producto: ");
                               gets (prod[c].categoria);
                               printf ("Costo del Producto: ");
                               scanf ("%f", &prod[c].costo);
                               c=c+1;
                               }
                               system ("pause");
                               system ("cls");
                                           }
           
       int buscar()
       {
           int clave;
          printf ("Ingresa la clave a buscar [0-50] \n");
                           scanf ("%d", &clave);
                           while (clave<=50 || clave>0){
                                 printf ("Nombre del Producto: %s \n", prod[clave].nomProd);
                                 printf ("Fecha de Entrada: %s \n", prod[clave].fecha);
                                 printf ("Categoria: %s \n", prod[clave].categoria);
                                 printf ("Costo del Producto: %.2f pesos\n\n\n", prod[clave].costo);
                                 system ("pause");
                                 system ("cls");
                                 
          }  }
         
       int precio()
       {
           int clave;
            printf ("Ingresa la clave a buscar [0-50] \n");
                           scanf ("%d", &clave);
                           while (clave<=50 || clave>0){
                           printf ("Nombre del Producto: %s \n", prod[clave].nomProd);           
                           printf ("El precio sugerido de Venta es: %.2f pesos\n\n\n", (prod[clave].costo)*1.30);
                           system ("pause");
                           system ("cls");
                           break;
            }}
           
        int salir()
        {
            return 0;
            }
           

Akai

Si, tu problema está en que tanto precio, buscar y clave son funciones de tipo int y no tienen return.

Si pretendes que no devuelvan nada, decláralas como void.

Por otro lado, no se que clase de compilador estás usando, pero como mínimo, se le podría prestar un poco de atención a los avisos y /o errores, y de paso, cuando preguntes, ponerlos aquí.

RyogiShiki

el problema aquí también está en el cierre de un bloque, al parecer no has leido atento el anterior mensaje de Akai, ya que el problema se encuentra en el do-while en donde falta una llave, aparte de eso a continuación dejo la la salida de la compilación con parametros -Wall y -Wextra para que mires en que partes del código tienes fallas:


oo.c:20: warning: return type defaults to 'int'
oo.c: In function 'main':
oo.c:21: warning: unused variable 'clave'
oo.c:21: warning: unused variable 'c'
oo.c: In function 'precio':
oo.c:107: warning: control reaches end of non-void function
oo.c: In function 'buscar':
oo.c:94: warning: control reaches end of non-void function
oo.c: In function 'entrada':
oo.c:79: warning: control reaches end of non-void function
oo.c: In function 'main':
oo.c:52: warning: control reaches end of non-void function
/tmp/ccEQ4tAC.o: In function `entrada':
oo.c:(.text+0x144): warning: the `gets' function is dangerous and should not be used.


Como podrás ver casi todo es porque las funciones no retornan un entero siendo declaradas como tal, debes retornar un valor al final de cada función según el tipo correspondiente, como podrás ver también se advierte sobre la omision de la declaración del tipo de main que debería ser entero y que además no tiene valor de retorno, unas cuantas variables que declaras y no usas, y por último los riesgos de usar 'gets'

Saludos


rjobel

Gracias a todos por su ayuda.

El programa ya jala bien. Espero ir mejorando para no caer en errores tan simples.

Saludos

Firos

#14
Te vendría bien organizarte el cógido.

Si usas las funciones de esa manera usalas asi:
void buscar(void){ }

void quiere decir que no devuelve nada, y void entre paréntesis quiere decir que no se le pasa ningún parámetro a la funcion

Por otro lado, para organizarte el código es mejor que declares las funciones arriba, antes del main, quedándote de tal manera:
#include ...las librerias...

// DECLARAS AQUI LOS PROTOTIPOS DE LAS FUNCIONES
void buscar(void);
void precio(void);

int main{
...TU PROGRAMA...

// Como ves, cuando declaras una funcion o el cuerpo con INT (podrias hacerlo tambien con void) tienes que hacer return 0; para que el programa sepa que termina bien.
return 0;

}

void buscar(){
LA FUNCION
}

void precio(){
LA FUNCION
}


Declarando las funciones con el prototipo arriba podras usarlas en cualquier parte del programa.

Cuando metas en una variable el valor de lo que devuelve la función solo tienes que aplicarle un poco de lógica.

#include <stdio.h>

int funcion();

int main()
{
int variable;

variable=funcion();

printf("%d",variable);

return 0;
}

int funcion()
{
int a=5, b=2;

return (a+b);
}



Este programa lo que hace es sumar a+b por lo que cuando ejecute la funcion() lo que devuelva se meterá dentro de variable y al hacer printf %d variable nos saldrá un 7. Como ves declaramos la función con INT porque "variable" esta declarada como INT, por lo que trabajara con números enteros y ambas deben ser del mismo tipo, tanto la función como la variable que recoge los datos de la función.


Espero te sirva un poco. Cuando manejes esto, mira el tema de pasar parametros a las funciones. Para programar hay que aprender tambien a simplificar el main.


Un saludo.
El final del camino no está determinado, lo determinamos nosotros mismos paso a paso, día a día, y se puede cambiar.