Ayuda con codigo C++

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

0 Miembros y 1 Visitante están viendo este tema.

rjobel

Buen día. Estoy estudiando programación, apenas iniciando.
Nos pidieron un programa donde usemos struct. Consultando ejemplos hice un programa, pero no compila. Me marca errores en la linea final. La verdad no se donde esta el problema. Los errores y el codigo completo abajo. ¿Podrían ayudarme para que el programa compile? Gracias por adelantado.

Errores:
error: expected `while' at end of input
error: expected `(' at end of input
error: expected primary-expression at end of input
error: expected `)' at end of input
error: expected `;' at end of input
error: expected `}' at end of input

Codigo:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

main(){
       struct prod{
              char nomProd[30];
              char fecha[10];
              char categoria[20];
              float costo;
              float pVenta;
              } prod[50];
              int cv=0, opc, clave; /*Arreglo de tipo estructura*/
             
       do{
              printf ("Abarrotes Bel-Yes - Registro de Productos \n\n");
              printf ("Opciones \n");
              printf ("1) Registrar producto \n");
              printf ("2) Buscar prudcto \n");
              printf ("3) Salir \n\n");
              printf ("Elige una opcion");
              scanf ("%d", &opc);
             
              switch (opc){      /*Opciones*/
                     case 1:   /*Entrada de datos del producto*/
                          if (cv>=50)
                          printf ("No hay espacio para mas productos en el abarrotes \n");
                          else {
                               printf ("Ingresa los datos del producto \n");
                               printf ("Clave %d \n", cv);
                               printf ("Nombre del Producto: ");
                               fflush (stdin);
                               gets (prod[cv].nomProd);
                               printf ("Fecha de Entrada: [dd/mm/aa]");
                               gets (prod[cv].fecha);
                               printf ("Categoria del Producto: ");
                               gets (prod[cv].categoria);
                               printf ("Costo del Producto: ");
                               scanf ("%f", &prod[cv].costo);
                               cv=cv+1;
                               }
                               break;
                      case 2:  /*Busqueda de producto por clave*/
                           printf ("introduzca la clave a buscar \n");
                           scanf ("%d", &clave);
                           while (clave<0 || clave>=50){
                                 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: %f \n", prod[clave].costo);
                                 break;
                      case 3:
                           break;
                           
                      default:
                              printf ("Esa es una opcion invalida \n");
                              break;
                             
                              system("pause");
                              }
                              }while (opc!='3');
                              }

[L]ord [R]NA


Garfield07

1) No tienes todas las llaves cerradas. Revísalas
2) Eso no es programación estructurada, eso son muchos espacios. Usa el tabulador y estructura bien el código.
3) Tienes faltas de ortografía en los printf ();
4) Usas las funciones inseguras fflush () y gets ().
5) El código es muy largo, se puede acortar.
6) NUNCA uses Conio.
7) Main se debe declarar como un "int main".

PS: La próxima vez usa las etiquetas GeShi

#include <stdio.h>
int main ()
{
printf ("Esto es un ejemplo de etiqueta GeShi.\n");
printf ("A que se ve mejor?\n");
return 0;
}


Un saludo. Sagrini


* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo

Slava_TZD

#3
Eso no es C++. Así me compila sin problemas y creo que hace lo que deseas. Como te han dicho, si no tabulas correctamente, se hace complicado leer. No incluyas cabeceras por que suenen bien si luego no haces uso de ellas... :xD (conio!)
#include <stdio.h>
#include <stdlib.h>

main(){
      struct prod
      {
             char nomProd[30];
             char fecha[10];
             char categoria[20];
             float costo;
             float pVenta;
             } prod[50];
      int cv=0, opc, clave;
      do
      {
             printf ("Abarrotes Bel-Yes - Registro de Productos \n\n");
             printf ("Opciones \n");
             printf ("1) Registrar producto \n");
             printf ("2) Buscar prudcto \n");
             printf ("3) Salir \n\n");
             printf ("Elige una opcion");
             scanf ("%d", &opc);

             switch (opc)
             {    
                    case 1: if (cv>=50) printf ("No hay espacio para mas productos en el abarrotes \n");
                            else
                            {
                              printf ("Ingresa los datos del producto \n");
                              printf ("Clave %d \n", cv);
                              printf ("Nombre del Producto: ");
                              fflush (stdin);
                              gets (prod[cv].nomProd);
                              printf ("Fecha de Entrada: [dd/mm/aa]");
                              gets (prod[cv].fecha);
                              printf ("Categoria del Producto: ");
                              gets (prod[cv].categoria);
                              printf ("Costo del Producto: ");
                              scanf ("%f", &prod[cv].costo);
                              cv=cv+1;
                              }
                              break;
                     case 2:  /*Busqueda de producto por clave*/
                          printf ("introduzca la clave a buscar \n");
                          scanf ("%d", &clave);
                          while (clave>0 || clave<=50){
                                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: %f \n", prod[clave].costo);
                                break;

                     default:
                             printf ("Esa es una opcion invalida \n");
                             break;

                             system("pause");
                             }
                             }
                             }
                             while(opc!='3');
}


The fact is, even if you were to stop bombing us, imprisoning us, torturing us, vilifying us, and usurping our lands, we would continue to hate you because our primary reason for hating you will not cease to exist until you embrace Islam.

elviscaspa

Hola, soy nuevo en esto y quería pedir ayuda.
Sabriaís como puedo insertar un espacio en un string cuando detecte "_"
____________________________________________________
...
..
.

else {
   if(depth==1)
   {    
     cout<<n->info.get_label()<<"_[ ";
        }

El problema es que no se como se puede declarar n->info.get_label() a string y posteriormente tratarlo, de modo que si encuentra una barra_baja haga una cosa u otra.


Gracias de antemano.
Un saludo

rjobel

Gracias a todos por sus respuestas.

Encontre que le faltaba una llave antes del último while.
Apenas tengo unos meses estudiando C++ (y programación en realidad), así que estoy en pañales aun. Espero ir mejorando mis códigos.

Dos duda solamente:

1) ¿Es posible crear una version modular (usando funciones) de ese programa?

2) ¿Como uso GESHI? Ya lo descargue pero no se como instalarlo o usarlo. Disculpen mi ignorancia, pero si no pregunto no voy a saber como hacerlo.

Saludos

RyogiShiki

#6
Cita de: rjobel en  7 Abril 2011, 19:58 PM
Gracias a todos por sus respuestas.

Encontre que le faltaba una llave antes del último while.
Apenas tengo unos meses estudiando C++ (y programación en realidad), así que estoy en pañales aun. Espero ir mejorando mis códigos.

Dos duda solamente:

1) ¿Es posible crear una version modular (usando funciones) de ese programa?

2) ¿Como uso GESHI? Ya lo descargue pero no se como instalarlo o usarlo. Disculpen mi ignorancia, pero si no pregunto no voy a saber como hacerlo.

Saludos

Estas son las Etiquetas GeSHi:

Las encuentras en el editor de texto del foro, y te generaran unas etiquetas para poner tu codigo.


Y si puedes resolver cualquier problema de manera funcional o modular (imagino que hasta cierto grado de complejidad, donde otro paradigma seria más efectivo y flexible), por ejemplo, y es solo un ejemplo porque no he visto el código puedes convertir el proceso lógico de cada una de las operaciones correspondientes a cada item del menú en una función diferente.

Saludos


Garfield07

Remarcaré mi respuesta, seguís teniendo fallos ya indicados. Y de paso ya indico lo del GeShi...
Cita de: Sagrini en  6 Abril 2011, 10:09 AM
1) No tienes todas las llaves cerradas. Revísalas
2) Eso no es programación estructurada, eso son muchos espacios. Usa el tabulador y estructura bien el código.
3) Tienes faltas de ortografía en los printf ();
4) Usas las funciones inseguras fflush () y gets ().
5) El código es muy largo, se puede acortar.
6) NUNCA uses Conio.
7) Main se debe declarar como un "int main".

PS: La próxima vez usa las etiquetas GeShi

#include <stdio.h>
int main ()
{
printf ("Esto es un ejemplo de etiqueta GeShi.\n");
printf ("A que se ve mejor?\n");
return 0;
}

[/b]

Y luego... sí, piensa cómo quieres dividirlas. Mira ejemplos, no hay forma...


* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo

rjobel

Bueno, aqui esta de nuevo el código pero ahora con funciones. El programa compila, pero no funciona, pues no ejecuta cada una de las funciones.

Como les comenté antes, soy nuevo en esto y no dispongo de un profesor (estudio online), así que si ven donde está el error les voy a agradecer mucho me lo hagan saber.

Se supone que mañana durante el día debo enviar esta tarea y de verdad necesito su ayuda.

Se que aun tengo que mejorar en las tabulaciones, pero al menos ahora si use GESHI.

Este es el código.

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


/*Declaración 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);
       
       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);
              }
             
             while (opc!=4); { 
                   
                   switch (opc){      /*Opciones*/
                     case 1:
                          entrada();
                          break;
                     case 2:
                          buscar();
                          break;
                     case 3:
                          precio();
                          break; 
                     default:
                              printf ("Esa es una opcion invalida \n");
                              return 0;
                              break;                               
                          }
                     }         
       } 
       /*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;
            }
           
            }

Akai

Tu do while está mal organizado, me da la impresión:

ejemplo:
do{
lo_que_sea()
}while(algo);
//todo lo que siga no tiene que ver con el bucle



Mientras que tu código se organiza de la siguiente manera:
do{
imprimir
}while(opción!=4);
switch(opcion)


Resultado? Cuando salgas del bucle, tu programa sale, porque la propia opción 4, es la que según tu switch finaliza el programa.

Corrección? el switch debería ir dentro del do:while


  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; 
                     default:
                              printf ("Esa es una opcion invalida \n");
                              return 0;
                              break;                               
                          }

             }while (opc!=4); 



Y a menos que me haya dejado alguna llave por abrir o cerrar al copiar y corregir la posición del switch, eso debería funcionarte.