Problema con programa.

Iniciado por Daniel Contreras, 30 Agosto 2017, 23:50 PM

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

Daniel Contreras

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:


El código donde da el error es este:

case 2:      
     printf ("> Elija el numero de su candidato< \n");
     scanf ("%d", nc);
     
     if(nc=1)
     {
            printf ("> Usted acaba de votar por Daniel Contreras! ");
          }else
     if(nc=2)
     {
          candidato2=candidato2+1;
            printf ("> Usted acaba de votar por Alejandro Marquez! <");
          }else
     if(nc=3)
     {
          candidato3=candidato3+1;
            printf ("> Usted acaba de votar por Angelica Gutierrez! <");
          }else
     if(nc=4)
     {
          candidato4=candidato4+1;
            printf ("> Usted acaba de votar por Maria Ribas! <");
          }else
     if(nc=5)
     {
          candidato5=candidato5+1;
            printf ("> Usted acaba de votar por Angel Ramirez! <");
          }
     printf ("Desea volver al menu anterior? (Utilice y=Si, n=No)");
     scanf ("%s", mrespuesta);
     

getch();
 break;


OJO: Las variables ya estan establecidas..

//#######################- Variables -#####################################################
char candidato1, candidato2, candidato3, candidato4, candidato5;
     int nc;
     char mrespuesta, y, n;
//#########################################################################################


Si necesitan el código completo, avisarme pls.

engel lex

solo de entrada
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
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Daniel Contreras

#2
Aqui está el código completo, en cuanto a lo que me dijiste.. Sigue tirando error.

//#######################- Includes -######################################################
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
//#######################- Definiciones -##################################################

//#######################- Variables -#####################################################
char candidato1, candidato2, candidato3, candidato4, candidato5;
     int nc;
     char mrespuesta, y, n;
//#########################################################################################
main()
{
     system ("cls");
   int i=0, resp, num1,num2,opcion;
printf("Bienvenido a las elecciones estudiantiles 2017.\n");
printf("Porfavor, escoja una opcion:\n");
printf("1- Informacion de los candidatos.\n");
printf("2- Votar por un candidato.\n");
printf("3- Salir.\n");
printf("Opcion: ");
scanf("%d",&opcion);
switch(opcion)
{
case 1:
     system ("cls");
     printf ("########################################\n");
     printf ("############~ Candidatos ~##############\n");
     printf ("########################################\n");
     printf ("###      Nro 1. Daniel Contreras.    ###\n");
     printf ("### Cedula de Identidad: 26.298.220  ###\n");
     printf ("###             Edad: 19             ###\n");
     printf ("########################################\n");
     printf ("###      Nro 2. Alejandro Marquez.   ###\n");
     printf ("### Cedula de Identidad: 25.834.309  ###\n");
     printf ("###             Edad: 21             ###\n");
     printf ("########################################\n");
     printf ("###    Nro 3. Angelica Gutierrez.    ###\n");
     printf ("### Cedula de Identidad: 26.374.165  ###\n");
     printf ("###             Edad: 18             ###\n");
     printf ("########################################\n");      
     printf ("###        Nro 4. Maria Ribas.       ###\n");
     printf ("### Cedula de Identidad: 25.189.042  ###\n");
     printf ("###             Edad: 20             ###\n");
     printf ("########################################\n");          
     printf ("###       Nro 5. Angel Ramirez.      ###\n");
     printf ("### Cedula de Identidad: 25.540.329  ###\n");
     printf ("###             Edad: 17             ###\n");
     printf ("########################################\n");
     printf ("Presione cualquier boton para volver al menu anterior.");
getch();
   return main();
 break;
 
case 2:      
     printf ("> Elija el numero de su candidato< \n");
     scanf ("%d", nc);
     
     if(nc==1)
     {
            candidato1 = candidato1 + 1;
            printf ("> Usted acaba de votar por Daniel Contreras! <");
          }else
     if(nc==2)
     {
          candidato2 = candidato2 + 1;
            printf ("> Usted acaba de votar por Alejandro Marquez! <");
          }else
     if(nc==3)
     {
          candidato3 = candidato3 + 1;
            printf ("> Usted acaba de votar por Angelica Gutierrez! <");
          }else
     if(nc==4)
     {
          candidato4 = candidato4 + 1;
            printf ("> Usted acaba de votar por Maria Ribas! <");
          }else
     if(nc==5)
     {
          candidato5 = candidato5 + 1;
            printf ("> Usted acaba de votar por Angel Ramirez! <");
          }
     printf ("Desea volver al menu anterior? (Utilice y=Si, n=No)");
     scanf ("%s", mrespuesta);
     

getch();
 break;
case 3:
 break;
default:
 resp=0;
}

 return 0;
}

// ~######### FUNCIONES #############~



engel lex

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
int main()



esto
return main();

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



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



linea 85
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


El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Daniel Contreras

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.

engel lex

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

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.