[C++] Necesito una mano :D

Iniciado por santiagolo, 21 Febrero 2014, 01:58 AM

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

santiagolo

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:

CitarC:\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!

xaps

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 (cpp) [Seleccionar]
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");
      }
     
   }


pasaría a ser:
Código (cpp) [Seleccionar]

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");
}


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

Saludos
"The programmers of tomorrow are the wizards of the future" - Gave Newel

Gh057

#2
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!
4 d0nd3 1r4 3l gh057? l4 r3d 3s 74n v4s74 3 1nf1n1t4...

rir3760

Otros errores son:

* Definir la función "cargar" dentro de la función main:
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]);
   }
}


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

* En la función "cargar" tienes un bucle infinito:
for(c=1;cant>=10;c++){
   /* 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
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

santiagolo

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/* 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 :(

xaps

Me autocito:
Cita de: xaps en 21 Febrero 2014, 02:27 AM
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.
"The programmers of tomorrow are the wizards of the future" - Gave Newel