Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: santiagolo en 21 Febrero 2014, 01:58 am



Título: [C++] Necesito una mano :D
Publicado por: santiagolo en 21 Febrero 2014, 01:58 am
Bueno, hola gente, soy nuevo, ya me estaré presentando.
Tengo que rendir programación, la verdad es que siempre odie el tema porque no lograba entenderlo. Estos últimos dos meses, me puse a estudiar, y creanme, me enamoré de esto, me encanta hacer programitas todo el tiempo, esucuchando música y relajandome jaja.
Bien, vayamos al punto en cuestión. Hice este programa, y tengo un solo error. Me considero un "Novato" o "Principiante" y estoy aprendiendo mucho, pero nunca termino este programa.
Aquí el code:

Citar
/* Trabajo Práctico de Programación FEBRERO 18/*/

#include <stdlib.h>
#include <stdio.h>
#include "string.h"
int main(){
   int cant,c,dni;
   char nomb[150][10],ape[150][10],ts[150][10];
   int cargar(){
   printf ("Ingrese la cantidad de empleados :");
   scanf ("%i",&cant);
   
    for(c=1;cant>=10;c++){
      system("cls");
      printf ("Ingrese el nombre del empleado:",c);
      scanf ("%s",&nomb[c]);
      printf ("Ingrese el apellido del empleado:",c);
      scanf ("%s",&ape[c]);
      printf ("Ingrese el DNI del empleado :",c);
      scanf ("%s",&dni);
      printf ("Ingrese el Tipo de sangre del empleado (POSITIVA-NEGATIVA)",c);
      scanf ("%s",&ts[c]);
      }
   }
int ver(){

     if(cant==0){
                                   printf("No ingreso los empleados");
                                   }
                       else{
                       printf("Empleados:\n");
                       for(c=1;c<=cant;c++){
                                            printf("\n %s %s %s",nomb[c],ape[c],ts[c]);
                                            }
                       }
     }
   
int menu(){
   int opc;
   do{
      system ("cls");
      printf ("Cargar\n Ver\n2 Salir\n3");
      scanf ("%d",&opc);
      switch(opc){
         case 1: cargar();
         break;
         case 2: ver();
         break;
         case 3: printf ("Fin del programa");
         break;
         default: printf ("La opcion es incorrecta");
         break;
         while (opc!=3);
      system ("pause");
      }
      
   }
      }

El error:

Citar
C:\Users\Miguel\Desktop\Nueva carpeta\santi!!!!.c In function `menu':
58 C:\Users\Miguel\Desktop\Nueva carpeta\santi!!!!.c syntax error before '}' token

Como verán, es el último "Corchete" en el que sale el error marcado. Con muchas ansias, espero su respuesta!
Muchas gracias!


Título: Re: [C++] Necesito una mano :D
Publicado por: xaps en 21 Febrero 2014, 02:27 am
Bienvenido. Varias recomendaciones iniciales:
- No escribas todo el texto en negrita: Úsalo para remarcar palabras clave.
- Deja el texto alineado a la izquierda. Es más fácil de leer.
- Usa las etiquetas GeSHi para introducir código.

En cuanto al código, tienes mal puestos los corchetes en la función menú:
Código
  1. int menu(){
  2.   int opc;
  3.   do{
  4.      system ("cls");
  5.      printf ("Cargar\n Ver\n2 Salir\n3");
  6.      scanf ("%d",&opc);
  7.      switch(opc){
  8.         case 1: cargar();
  9.         break;
  10.         case 2: ver();
  11.         break;
  12.         case 3: printf ("Fin del programa");
  13.         break;
  14.         default: printf ("La opcion es incorrecta");
  15.         break;
  16.         while (opc!=3);
  17.      system ("pause");
  18.      }
  19.  
  20.   }

pasaría a ser:
Código
  1. int menu()
  2. {
  3.   int opc;
  4.   do{
  5.      system ("cls");
  6.      printf ("Cargar\n Ver\n2 Salir\n3");
  7.      scanf ("%d",&opc);
  8.      switch(opc){
  9.         case 1: cargar();
  10.         break;
  11.         case 2: ver();
  12.         break;
  13.         case 3: printf ("Fin del programa");
  14.         break;
  15.         default: printf ("La opcion es incorrecta");
  16.         break;
  17.      };
  18.    } while (opc!=3);
  19.    system ("pause");
  20. }
  21.  

Fallos:
- No habías cerrado el switch.
- El corchete para cerrar el bucle do..while estaba mal colocado.

Saludos


Título: Re: [C++] Necesito una mano :D
Publicado por: Gh057 en 21 Febrero 2014, 02:37 am
Hola santiagolo justamente, estaba indicándote lo mismo, solo agrego a la excelente explicación de xaps de que el compilador cuando hay un error en la sintaxis, puede informarte en la línea inmediatamente inferior al mismo, ténlo en cuenta ya que puedes estar buscando un error y puede pasar por ejemplo que en la superior le falta el fin de sentencia ";" (para él es la continuación de la misma) o por un fin de bucle o función, etc. Saludos!


Título: Re: [C++] Necesito una mano :D
Publicado por: rir3760 en 21 Febrero 2014, 02:43 am
Otros errores son:

* Definir la función "cargar" dentro de la función main:
Código
  1. int main()
  2. {
  3.   int cant,c,dni;
  4.   char nomb[150][10],ape[150][10],ts[150][10];
  5.  
  6. int cargar()
  7. {
  8.   printf ("Ingrese la cantidad de empleados :");
  9.   scanf ("%i",&cant);
  10.  
  11.   for(c=1;cant>=10;c++){
  12.      system("cls");
  13.      printf ("Ingrese el nombre del empleado:",c);
  14.      scanf ("%s",&nomb[c]);
  15.      printf ("Ingrese el apellido del empleado:",c);
  16.      scanf ("%s",&ape[c]);
  17.      printf ("Ingrese el DNI del empleado :",c);
  18.      scanf ("%s",&dni);
  19.      printf ("Ingrese el Tipo de sangre del empleado (POSITIVA-NEGATIVA)",c);
  20.      scanf ("%s",&ts[c]);
  21.   }
  22. }

* Bucle do ... while mal estructurado en la función "menu".

* En la función "cargar" tienes un bucle infinito:
Código
  1. for(c=1;cant>=10;c++){
  2.   /* Bucle infinito ya que no se modifica el valor de cant */

* En esa misma función no puedes utilizar la variable "cant" ya que esta la declaras en la función main.

Un saludo


Título: Re: [C++] Necesito una mano :D
Publicado por: santiagolo en 21 Febrero 2014, 04:14 am
Uy, quedé sumamente sorprendido con sus respuestas, no esperaba tanta ayuda jajaja. Muchísimas gracias!

Por otro lado, surgió otro problemita, cuando compilo el programa, se cierra automáticamente!
¿A qué se debe esto?


Citar
Código:
/* Trabajo Práctico de Programación FEBRERO 18/*/

#include <stdlib.h>
#include <stdio.h>
#include "string.h"
int main()
{
   int cant,c,dni;
   char nomb[150][10],ape[150][10],ts[150][10];
 
int cargar()
{
   printf ("Ingrese la cantidad de empleados :");
   scanf ("%i",&cant);
 
   for(c=1;cant>=10;c++){
      system("cls");
      printf ("Ingrese el nombre del empleado:",c);
      scanf ("%s",&nomb[c]);
      printf ("Ingrese el apellido del empleado:",c);
      scanf ("%s",&ape[c]);
      printf ("Ingrese el DNI del empleado :",c);
      scanf ("%s",&dni);
      printf ("Ingrese el Tipo de sangre del empleado (POSITIVA-NEGATIVA)",c);
      scanf ("%s",&ts[c]);
   }
}
int ver(){

     if(cant==0){
                                   printf("No ingreso los empleados");
                                   }
                       else{
                       printf("Empleados:\n");
                       for(c=1;c<=cant;c++){
                                            printf("\n %s %s %s",nomb[c],ape[c],ts[c]);
                                            }
                       }
     }

int menu()
{
   int opc;
   do{
      system ("cls");
      printf ("Cargar\n Ver\n2 Salir\n3");
      scanf ("%d",&opc);
      switch(opc){
         case 1: cargar();
         break;
         case 2: ver();
         break;
         case 3: printf ("Fin del programa");
         break;
         default: printf ("La opcion es incorrecta");
         break;
      };
    } while (opc!=3);
    system ("pause");
}
}


PD: Los colores del texto, se me desconfiguraron, pero logré colocarlos en Herramientas/OpcionesDelEditor/Sintaxis, y acá no funcionan :(


Título: Re: [C++] Necesito una mano :D
Publicado por: xaps en 21 Febrero 2014, 11:32 am
Me autocito:
Varias recomendaciones iniciales:
- No escribas todo el texto en negrita: Úsalo para remarcar palabras clave.
- Deja el texto alineado a la izquierda. Es más fácil de leer.
- Usa las etiquetas GeSHi para introducir código.

Para los colores del código usa GeSHi como ya te he dicho, lo tienes justo encima de la opción de cambiar color.

Y el programa se cierra por una simple razón: No tiene ninguna pausa. Se ejecutan las instrucciones del main y finaliza. Si quieres que no se te cierre solo, puedes hacer que se mantenga a la espera de un input.

Por cierto, desde el main no llamas a ninguna de las funciones que has programado, repásalo.