Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Juan821 en 5 Junio 2014, 03:37 am



Título: Tengo un problema ayuda!
Publicado por: Juan821 en 5 Junio 2014, 03:37 am
(uso visual studio 2010) en este programa trato de que entre a una categoria cualquiera para hacer una serie de preguntas pero ese es el error que no entra a ninguno de los casos

#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
#include <stdio.h>
using namespace std;
int His(int);
int Cien(int);
int Depor(int);
int Geo(int);
int c=1;
int main()
   {
      int s,tot,u=0;
       while (c==1)
      {
      cout<<"Presione cualquier tecla para escoger su categoria"<<endl;
      getch();
      srand(time(NULL));
      s=rand()% 4 + 1;
      cout<<"Presione cualquier tecla para escoger su categoria"<<s<<endl;
      switch (s)
      {
      case 1:
         {
            int His();
            break;
         }
      case 2:
         {
            int Cien();
            break;
         }
      case 3:
         {
            int Depor();
            break;
         }
      case 4:
         {
            int Geo();
            break;
         }
      }
      }
      system ("pause");
      return 0;
   }

int His()
{
   system ("cls");
   cout<<"<===============Su categoria es historia===============>"<<endl;
   cout<<"Presione cualquier tecla para continuar"<<endl;
   getch();
   return 0;
}
int Depor()
{
   system ("cls");
   cout<<"<===============Su categoria es Ciencia===============>"<<endl;
   cout<<"Presione cualquier tecla para continuar"<<endl;
   getch();
   return 0;
}
int Cien()
{
   system ("cls");
   cout<<"<===============Su categoria es Deportes===============>"<<endl;
   cout<<"Presione cualquier tecla para continuar"<<endl;
   getch();
   return 0;
}
int Geo()
{
   system ("cls");
   cout<<"<===============Su categoria es Deportes===============>"<<endl;
   cout<<"Presione cualquier tecla para continuar"<<endl;
   getch();
   return 0;
}


Título: Re: Tengo un problema ayuda!
Publicado por: Drewermerc en 5 Junio 2014, 04:14 am
hola amigo.
bueno supongo que el error radica en que el prototipo de la funcion esta mal por que yo que sepa si no se vana pasar variable no tienes que poner nada en lo parentesis y aparte de que lo indicas que que se pasara una variable int pero ni siquiera poner el nombre de la variable.
y tambien cuando llamas a la funcion solo es el puro nombre sin el int seria algo asi.

Código
  1. //prototipo correcto
  2. int Depor();
  3.  
  4. // cuando se llama a la funcion es asi
  5. Depor();
  6.  

Saludos.
Drewermerc.


Título: Re: Tengo un problema ayuda!
Publicado por: Juan821 en 5 Junio 2014, 04:19 am
Pero cuando lo hago asi me aparece el error de compilacion ya lo intente


Título: Re: Tengo un problema ayuda!
Publicado por: Drewermerc en 5 Junio 2014, 04:22 am
que error es el que te manda.


Título: Re: Tengo un problema ayuda!
Publicado por: rir3760 en 5 Junio 2014, 04:26 am
Pero cuando lo hago asi me aparece el error de compilacion ya lo intente
Pues habra que revisar tu codigo fuente actualizado ya que las indicaciones de Drewermerc deben solucionar el problema siempre y cuando las apliques correctamente.

Explicando un poco mas a detalle el problema se genera en los casos de (la sentencia condicional) switch:
Código
  1. switch (s) {
  2. case 1: {
  3.   int His();
  4.   break;
  5. }
  6. case 2: {
  7.   int Cien();
  8.   break;
  9. }
  10. case 3: {
  11.   int Depor();
  12.   break;
  13. }
  14. case 4: {
  15.   int Geo();
  16.   break;
  17. }
  18. }
El detalle ahí es que no estas llamando a las funciones, las estas declarando.

Para solucionarlo se debe cambiar a:
Código
  1. // Las funciones no requieren de argumentos
  2. int His();
  3. int Cien();
  4. int Depor();
  5. int Geo();
  6.  
  7. // ...
  8.  
  9. switch (s){
  10. case 1:
  11.   His();
  12.   break;
  13. case 2:
  14.   Cien();
  15.   break;
  16. case 3:
  17.   Depor();
  18.   break;
  19. case 4:
  20.   Geo();
  21.   break;
  22. }

Otras partes que se deben modificar en el programa son:

* Utilizar el nombre correcto de los encabezados en C++: <cstdlib> y <ctime>, el encabezado <stdio.h> no es necesario en el programa y su directiva de inclusión debe eliminarse.

* Evitar el uso de la biblioteca conio de Borland, mas información en la pagina |Lo que no hay que hacer en C/C++. Nivel basico| (http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html).

* La llamada a srand hay que colocarla justo al principio de la función main pero fuera del bucle.

* No es necesaria la variable "s" ya que puedes utilizar la expresión "rand() % 4 + 1" directamente para controlar la rama de ejecución en el condicional:
Código
  1. switch (rand() % 4 + 1){
  2. // ...

Un saludo


Título: Re: Tengo un problema ayuda!
Publicado por: Juan821 en 5 Junio 2014, 04:31 am
Bueno el problema que me sale es que la funcion no puede aceptar argumentos 0


Título: Re: Tengo un problema ayuda!
Publicado por: Juan821 en 5 Junio 2014, 04:34 am
Pues habra que revisar tu codigo fuente actualizado ya que las indicaciones de Drewermerc deben solucionar el problema siempre y cuando las apliques correctamente.

Explicando un poco mas a detalle el problema se genera en los casos de (la sentencia condicional) switch:
Código
  1. switch (s) {
  2. case 1: {
  3.   int His();
  4.   break;
  5. }
  6. case 2: {
  7.   int Cien();
  8.   break;
  9. }
  10. case 3: {
  11.   int Depor();
  12.   break;
  13. }
  14. case 4: {
  15.   int Geo();
  16.   break;
  17. }
  18. }
El detalle ahí es que no estas llamando a las funciones, las estas declarando.

Para solucionarlo se debe cambiar a:
Código
  1. // Las funciones no requieren de argumentos
  2. int His();
  3. int Cien();
  4. int Depor();
  5. int Geo();
  6.  
  7. // ...
  8.  
  9. switch (s){
  10. case 1:
  11.   His();
  12.   break;
  13. case 2:
  14.   Cien();
  15.   break;
  16. case 3:
  17.   Depor();
  18.   break;
  19. case 4:
  20.   Geo();
  21.   break;
  22. }

Otras partes que se deben modificar en el programa son:

* Utilizar el nombre correcto de los encabezados en C++: <cstdlib> y <ctime>, el encabezado <stdio.h> no es necesario en el programa y su directiva de inclusión debe eliminarse.

* Evitar el uso de la biblioteca conio de Borland, mas información en la pagina |Lo que no hay que hacer en C/C++. Nivel basico| (http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html).

* La llamada a srand hay que colocarla justo al principio de la función main pero fuera del bucle.

* No es necesaria la variable "s" ya que puedes utilizar la expresión "rand() % 4 + 1" directamente para controlar la rama de ejecución en el condicional:
Código
  1. switch (rand() % 4 + 1){
  2. // ...

Un saludo

Lo de las librerias me exige visual studio que sea asi, lo de la variable a la final fue por lo que no me daba intentado solucionarlo he llegado hasta alla y lo otro ya lo arregle pero me sigue saliendo el error que no acepta 0 argumentos


Título: Re: Tengo un problema ayuda!
Publicado por: Juan821 en 5 Junio 2014, 04:38 am
Pues habra que revisar tu codigo fuente actualizado ya que las indicaciones de Drewermerc deben solucionar el problema siempre y cuando las apliques correctamente.

Explicando un poco mas a detalle el problema se genera en los casos de (la sentencia condicional) switch:
Código
  1. switch (s) {
  2. case 1: {
  3.   int His();
  4.   break;
  5. }
  6. case 2: {
  7.   int Cien();
  8.   break;
  9. }
  10. case 3: {
  11.   int Depor();
  12.   break;
  13. }
  14. case 4: {
  15.   int Geo();
  16.   break;
  17. }
  18. }
El detalle ahí es que no estas llamando a las funciones, las estas declarando.

Para solucionarlo se debe cambiar a:
Código
  1. // Las funciones no requieren de argumentos
  2. int His();
  3. int Cien();
  4. int Depor();
  5. int Geo();
  6.  
  7. // ...
  8.  
  9. switch (s){
  10. case 1:
  11.   His();
  12.   break;
  13. case 2:
  14.   Cien();
  15.   break;
  16. case 3:
  17.   Depor();
  18.   break;
  19. case 4:
  20.   Geo();
  21.   break;
  22. }

Otras partes que se deben modificar en el programa son:

* Utilizar el nombre correcto de los encabezados en C++: <cstdlib> y <ctime>, el encabezado <stdio.h> no es necesario en el programa y su directiva de inclusión debe eliminarse.

* Evitar el uso de la biblioteca conio de Borland, mas información en la pagina |Lo que no hay que hacer en C/C++. Nivel basico| (http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html).

* La llamada a srand hay que colocarla justo al principio de la función main pero fuera del bucle.

* No es necesaria la variable "s" ya que puedes utilizar la expresión "rand() % 4 + 1" directamente para controlar la rama de ejecución en el condicional:
Código
  1. switch (rand() % 4 + 1){
  2. // ...

Un saludo

Pero ya solucione el problema lo de la libreria conio.h porque la reemplazaria necesito la pausa en el sistema hasta que se presione una tecla


Título: Re: Tengo un problema ayuda!
Publicado por: Drewermerc en 5 Junio 2014, 04:38 am
podrias poner el error que te da el compilador. y tu codigo completo.


Título: Re: Tengo un problema ayuda!
Publicado por: Juan821 en 5 Junio 2014, 04:40 am
No ya resolvi el problema muchas gracias fue un error de mi profesor a enseñarme algo que no era pero porque prodia reemplazar ese getch que necesito para hacer una pausa en el sistema para poder quitar la libreria conio.h