Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Daniel Contreras en 30 Agosto 2017, 23:50 pm



Título: Problema con programa.
Publicado por: Daniel Contreras en 30 Agosto 2017, 23:50 pm
Buenas, vengo aquí para plantearles mi situación..

Estoy realizando una simulación de elecciones escolares, donde 5 estudiantes aspiran a ser elegidos por sus compañeros, la cosa es que intento hacer un menú donde me muestre 3 opciones, Ver los candidatos, votar y salir.. La primera y la tercera opcion me van de bien, pero la segunda al elegir el candidato me tira el siguiente error:

(http://i.imgur.com/94QUFow.png)

El código donde da el error es este:

Código
  1. case 2:      
  2.      printf ("> Elija el numero de su candidato< \n");
  3.      scanf ("%d", nc);
  4.  
  5.      if(nc=1)
  6.      {
  7.             printf ("> Usted acaba de votar por Daniel Contreras! ");
  8.           }else
  9.      if(nc=2)
  10.      {
  11.           candidato2=candidato2+1;
  12.             printf ("> Usted acaba de votar por Alejandro Marquez! <");
  13.           }else
  14.      if(nc=3)
  15.      {
  16.           candidato3=candidato3+1;
  17.             printf ("> Usted acaba de votar por Angelica Gutierrez! <");
  18.           }else
  19.      if(nc=4)
  20.      {
  21.           candidato4=candidato4+1;
  22.             printf ("> Usted acaba de votar por Maria Ribas! <");
  23.           }else
  24.      if(nc=5)
  25.      {
  26.           candidato5=candidato5+1;
  27.             printf ("> Usted acaba de votar por Angel Ramirez! <");
  28.           }
  29.      printf ("Desea volver al menu anterior? (Utilice y=Si, n=No)");
  30.      scanf ("%s", mrespuesta);
  31.  
  32.  
  33. getch();
  34.  break;

OJO: Las variables ya estan establecidas..

Código
  1. //#######################- Variables -#####################################################
  2. char candidato1, candidato2, candidato3, candidato4, candidato5;
  3.      int nc;
  4.      char mrespuesta, y, n;
  5. //#########################################################################################

Si necesitan el código completo, avisarme pls.


Título: Re: Problema con programa.
Publicado por: engel lex en 31 Agosto 2017, 04:30 am
solo de entrada
Código
  1. if(nc=1)

es == para comparar, = es para asignar, allí está pasando que a nc se le asigna 1 y retorna 1


de resto no veo donde estás desbordando memoria, probablemente es en algún otro lugar del codigo... te recomiendo usar el debugger de tu ide para buscar con más precisión


Título: Re: Problema con programa.
Publicado por: Daniel Contreras en 31 Agosto 2017, 06:44 am
Aqui está el código completo, en cuanto a lo que me dijiste.. Sigue tirando error.

Código
  1. //#######################- Includes -######################################################
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <conio.h>
  5. //#######################- Definiciones -##################################################
  6.  
  7. //#######################- Variables -#####################################################
  8. char candidato1, candidato2, candidato3, candidato4, candidato5;
  9.      int nc;
  10.      char mrespuesta, y, n;
  11. //#########################################################################################
  12. main()
  13. {
  14.      system ("cls");
  15.    int i=0, resp, num1,num2,opcion;
  16. printf("Bienvenido a las elecciones estudiantiles 2017.\n");
  17. printf("Porfavor, escoja una opcion:\n");
  18. printf("1- Informacion de los candidatos.\n");
  19. printf("2- Votar por un candidato.\n");
  20. printf("3- Salir.\n");
  21. printf("Opcion: ");
  22. scanf("%d",&opcion);
  23. switch(opcion)
  24. {
  25. case 1:
  26.      system ("cls");
  27.      printf ("########################################\n");
  28.      printf ("############~ Candidatos ~##############\n");
  29.      printf ("########################################\n");
  30.      printf ("###      Nro 1. Daniel Contreras.    ###\n");
  31.      printf ("### Cedula de Identidad: 26.298.220  ###\n");
  32.      printf ("###             Edad: 19             ###\n");
  33.      printf ("########################################\n");
  34.      printf ("###      Nro 2. Alejandro Marquez.   ###\n");
  35.      printf ("### Cedula de Identidad: 25.834.309  ###\n");
  36.      printf ("###             Edad: 21             ###\n");
  37.      printf ("########################################\n");
  38.      printf ("###    Nro 3. Angelica Gutierrez.    ###\n");
  39.      printf ("### Cedula de Identidad: 26.374.165  ###\n");
  40.      printf ("###             Edad: 18             ###\n");
  41.      printf ("########################################\n");      
  42.      printf ("###        Nro 4. Maria Ribas.       ###\n");
  43.      printf ("### Cedula de Identidad: 25.189.042  ###\n");
  44.      printf ("###             Edad: 20             ###\n");
  45.      printf ("########################################\n");          
  46.      printf ("###       Nro 5. Angel Ramirez.      ###\n");
  47.      printf ("### Cedula de Identidad: 25.540.329  ###\n");
  48.      printf ("###             Edad: 17             ###\n");
  49.      printf ("########################################\n");
  50.      printf ("Presione cualquier boton para volver al menu anterior.");
  51. getch();
  52.    return main();
  53.  break;
  54.  
  55. case 2:      
  56.      printf ("> Elija el numero de su candidato< \n");
  57.      scanf ("%d", nc);
  58.  
  59.      if(nc==1)
  60.      {
  61.             candidato1 = candidato1 + 1;
  62.             printf ("> Usted acaba de votar por Daniel Contreras! <");
  63.           }else
  64.      if(nc==2)
  65.      {
  66.           candidato2 = candidato2 + 1;
  67.             printf ("> Usted acaba de votar por Alejandro Marquez! <");
  68.           }else
  69.      if(nc==3)
  70.      {
  71.           candidato3 = candidato3 + 1;
  72.             printf ("> Usted acaba de votar por Angelica Gutierrez! <");
  73.           }else
  74.      if(nc==4)
  75.      {
  76.           candidato4 = candidato4 + 1;
  77.             printf ("> Usted acaba de votar por Maria Ribas! <");
  78.           }else
  79.      if(nc==5)
  80.      {
  81.           candidato5 = candidato5 + 1;
  82.             printf ("> Usted acaba de votar por Angel Ramirez! <");
  83.           }
  84.      printf ("Desea volver al menu anterior? (Utilice y=Si, n=No)");
  85.      scanf ("%s", mrespuesta);
  86.  
  87.  
  88. getch();
  89.  break;
  90. case 3:
  91.  break;
  92. default:
  93.  resp=0;
  94. }
  95.  
  96.  return 0;
  97. }
  98.  
  99. // ~######### FUNCIONES #############~
  100.  
  101.  
  102.  


Título: Re: Problema con programa.
Publicado por: engel lex en 31 Agosto 2017, 06:55 am
tienes un lote de errores, no se ni si quiera como te deja compilar (debes estar en Dev C o algo así que pasa todos los errores)

primero man debe ser siempre de tipo int
Código
  1. int main()


esto
Código
  1. return main();

no es un error pero es una mala practica...


linea 57
Código
  1. scanf ("%d", nc);
esto es lo que te está dando el error, debes pasarlo como referencia (&nc)


linea 85
Código
  1. scanf ("%s", mrespuesta);
esto también dará error,  mrespuesta es tipo char, y el espera que sea de tipo char*, estás intentando meter una cadena en el espacio de un caracter individual... si es un solo caracter debe pasarse por referencia, si es un apuntador no


sobre los candidatos los tienes como tipo char, las operaciones matemáticas pasarán correctamente porque las letras a bajo nivel son numeros, pero a menos que estés claro en que haces, no es el uso correcto, por otro lado sería más apropiado declararlo como un solo array en lugar de 5 variables




Título: Re: Problema con programa.
Publicado por: Daniel Contreras en 31 Agosto 2017, 07:37 am
Gracias!, ya logre hacer que corra..

Tengo 2 preguntas antes de concluir.

¿Porque el return main(); lo consideras una mala práctica?

¿Que compilador me recomiendas para evitar estos tipos de errores? (Si, es DEV-C++)

En cuanto a las variables, ya las arreglé  :D

PD: Gracias de nuevo.


Título: Re: Problema con programa.
Publicado por: engel lex en 31 Agosto 2017, 07:40 am
ahorita no recuerdo que compilador usa Dev, creo que el de microsoft, pero personalmente y usaba (cuando estaba con windows) minGW y como ide usaba netbeans (puedes buscar como instalar netbeans con mingw)

lo del return main, porque cada vez que entras se llama recursivamente la función, y esto va a un stack de operaciones, no sabes que tantas veces se haga ni que tan grande es el stack y si este se desborda, el programa crashea intentando volver... por eso no es recomendada la programación recursiva y se recomienda la iterativa



Título: Re: Problema con programa.
Publicado por: Daniel Contreras en 31 Agosto 2017, 08:03 am
Gracias!.