Incorrect counting in electronic voting program

Asked

Viewed 611 times

2

I created an urn with the C language. The code is apparently correct, but the vote count always results in zero. The code was developed in Linux code:Blocks, so in order for it to work in windows, the Sleep and system("clear") command lines must be changed or commented.

Possible votes are 1, 2, 3 and 4 for candidates, 111 for blank or null vote and 999 for poll/closure of ballot box.

follows below the code:

#include <stdio.h>
#include <stdlib.h>


int votar()
{

    int candidato, confirmador, nulo, c1, c2, c3, c4;

    nulo = 0;
    c1 = 0;
    c2 = 0;
    c3 = 0;
    c4 = 0;

    system("clear");
    printf("Para Voto NULO ou BRANCO, digite 111 no candidato.\n\nDigite o numero do candidato:");
    scanf("%d",&candidato);

    switch(candidato)
    {

        case 111:

            system("clear");
            printf("Seu voto é: NULO OU BRANCO \nConfirma o voto? \n\n1-CONFIRMA\n2-CANCELAR\n\n");
            scanf("%d",&confirmador);

            if(confirmador==1)
            {
               // nulo++;
               nulo = nulo +1;
                system("clear");
                printf("Voto confirmado, obrigado por votar!\n\n\n");
                sleep (5);

            }
            if(confirmador==2)
            {
                votar();
            }
            if((confirmador!=1)&&(confirmador!=2))
            {
                system("clear");
                printf("Opcao invalida, digite 1 para CONFIRMAR ou 2 para CANCELAR.");
            }

            votar();

            break;


        case 999:

            //apuracao(c1, c2, c3, c4);
    printf("*****************************************\n");
    printf("ELEICOES 2016 - PESQUISA - PREFEITOS\n");
    printf("*****************************************\n");

    printf("\nJOAO: %d VOTOS\n",c1);
    printf("\nJOAQUIM %d VOTOS\n",c2);
    printf("\nJOANA: %d VOTOS\n",c3);
    printf("\nJULIA: %d VOTOS\n",c4);
    printf("\nBRANCOS OU NULOS: %d VOTOS\n",nulo);

    sleep (60);

        break;

        case 1:

            system("clear");
            printf("Seu candidato é: JOAO \nConfirma o voto? \n\n1-CONFIRMA\n2-CANCELAR\n\n");
            scanf("%d",&confirmador);

            if(confirmador==1)
            {
               // c1++;
               c1 = c1 +1;
                system("clear");
                printf("Voto confirmado, obrigado por votar!\n\n\n");
                sleep (5);

            }
            if(confirmador==2)
            {
                votar();
            }
            if((confirmador!=1)&&(confirmador!=2))
            {
                system("clear");
                printf("Opcao invalida, digite 1 para CONFIRMAR ou 2 para CANCELAR.");
            }

            votar();

            break;

        case 2:

            system("clear");
            printf("Seu candidato é: JOAQUIM \nConfirma o voto? \n\n1-CONFIRMA\n2-CANCELAR\n\n");
            scanf("%d",&confirmador);

            if(confirmador==1)
            {
               // c2++;
               c2 = c2 +1;
                system("clear");
                printf("Voto confirmado, obrigado por votar!\n\n\n");
                sleep (5);

            }
            if(confirmador==2)
            {
                votar();
            }
            if((confirmador!=1)&&(confirmador!=2))
            {
                system("clear");
                printf("Opcao invalida, digite 1 para CONFIRMAR ou 2 para CANCELAR.");
            }

        case 3:

            system("clear");
            printf("Seu candidato é: JOANA \nConfirma o voto? \n\n1-CONFIRMA\n2-CANCELAR\n\n");
            scanf("%d",&confirmador);

            if(confirmador==1)
            {
               // c3++;
               c3 = c3 +1;
                system("clear");
                printf("Voto confirmado, obrigado por votar!\n\n\n");
                sleep (5);

            }
            if(confirmador==2)
            {
                votar();
            }
            if((confirmador!=1)&&(confirmador!=2))
            {
                system("clear");
                printf("Opcao invalida, digite 1 para CONFIRMAR ou 2 para CANCELAR.");
            }

        case 4:

            system("clear");
            printf("Seu candidato é: JULIA \nConfirma o voto? \n\n1-CONFIRMA\n2-CANCELAR\n\n");
            scanf("%d",&confirmador);

            if(confirmador==1)
            {
               // c4++;
               c4 = c4 +1;
                system("clear");
                printf("Voto confirmado, obrigado por votar!\n\n\n");
                sleep (5);

            }
            if(confirmador==2)
            {
                votar();
            }
            if((confirmador!=1)&&(confirmador!=2))
            {
                system("clear");
                printf("Opcao invalida, digite 1 para CONFIRMAR ou 2 para CANCELAR.");
            }

        default:

            system("clear");
            printf("Candidato invalido, digite o numero do partido. \n\n");
            sleep(5);

            }

    votar();

}

int apuracao(int c1, int c2, int c3, int c4, int nulo)
{

    printf("*****************************************\n");
    printf("ELEICOES 2016 - PESQUISA - PREFEITOS\n");
    printf("*****************************************\n");

    printf("\nJOAO: %d VOTOS\n",c1);
    printf("\nJOAQUIM %d VOTOS\n",c2);
    printf("\nJOANA: %d VOTOS\n",c3);
    printf("\nJULIA: %d VOTOS\n",c4);
    printf("\nBRANCOS OU NULOS: %d VOTOS\n",nulo);


    return 0;
}

int main()
{

    printf("*****************************************\n");
    printf("ELEICOES 2016 - PESQUISA - PREFEITOS\n");
    printf("*****************************************\n");

    printf("\n\nBem-vindo(a) a pesquisa eleitoral 2016.\nEste programa e experimental e de codigo livre.\nPara encerrar a sessao, basta digitar 999 no campo candidato.\nPara iniciar aperte qualquer tecla.\n\n");
    getchar();

    votar();

    return 0;
}
  • Just to confirm: you are working with C and not C++, correct? You have put the two tags and they are very different languages.

  • Yes, I’m working on C, I was wrong to put the tags.

  • 1

    The good thing is that, even as it is, it is already more reliable than our electronic voting machines here in Brazil. At least your code we have to give publicly.

3 answers

2


Null, C1, C2, C3, C4, are now global, were missing two vote() and break, it was necessary to change the declaration of variables of the voting function, and instead of using recursive function you should include your program in an infinite loop perhaps with output condition.

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>


int nulo;
int c1;
int c2;
int c3;
int c4;

int votar() {

int candidato, confirmador;


system("clear");
printf("Para Voto NULO ou BRANCO, digite 111 no candidato.\n\nDigite o numero do candidato:");
scanf("%d",&candidato);

switch(candidato)
{

    case 111:

        system("clear");
        printf("Seu voto é: NULO OU BRANCO \nConfirma o voto? \n\n1-CONFIRMA\n2-CANCELAR\n\n");
        scanf("%d",&confirmador);

        if(confirmador==1)
        {
           // nulo++;
           nulo = nulo +1;
            system("clear");
            printf("Voto confirmado, obrigado por votar! \n\n\n");
            sleep (5);

        }
        if(confirmador==2)
        {
            votar();
        }
        if((confirmador!=1)&&(confirmador!=2))
        {
            system("clear");
            printf("Opcao invalida, digite 1 para CONFIRMAR ou 2 para CANCELAR.");
        }

        votar();

        break;


    case 999:

        //apuracao(c1, c2, c3, c4);
printf("*****************************************\n");
printf("ELEICOES 2016 - PESQUISA - PREFEITOS\n");
printf("*****************************************\n");

printf("\nJOAO: %d VOTOS\n",c1);
printf("\nJOAQUIM %d VOTOS\n",c2);
printf("\nJOANA: %d VOTOS\n",c3);
printf("\nJULIA: %d VOTOS\n",c4);
printf("\nBRANCOS OU NULOS: %d VOTOS\n",nulo);

sleep (60);

    break;

    case 1:

        system("clear");
        printf("Seu candidato é: JOAO \nConfirma o voto? \n\n1-CONFIRMA\n2-CANCELAR\n\n");
        scanf("%d",&confirmador);

        if(confirmador==1)
        {
           // c1++;
           c1 = c1 +1;
            system("clear");
            printf("Voto confirmado, obrigado por votar!\n\n\n");
            sleep (5);

        }
        if(confirmador==2)
        {
            votar();
        }
        if((confirmador!=1)&&(confirmador!=2))
        {
            system("clear");
            printf("Opcao invalida, digite 1 para CONFIRMAR ou 2 para CANCELAR.");
        }

        votar();

        break;

    case 2:

        system("clear");
        printf("Seu candidato é: JOAQUIM \nConfirma o voto? \n\n1-CONFIRMA\n2-CANCELAR\n\n");
        scanf("%d",&confirmador);

        if(confirmador==1)
        {
           // c2++;
           c2 = c2 +1;
            system("clear");
            printf("Voto confirmado, obrigado por votar!\n\n\n");
            sleep (5);

        }
        if(confirmador==2)
        {
            votar();
        }
        if((confirmador!=1)&&(confirmador!=2))
        {
            system("clear");
            printf("Opcao invalida, digite 1 para CONFIRMAR ou 2 para CANCELAR.");
        }
        votar();
        break;

    case 3:

        system("clear");
        printf("Seu candidato é: JOANA \nConfirma o voto? \n\n1-CONFIRMA\n2-CANCELAR\n\n");
        scanf("%d",&confirmador);

        if(confirmador==1)
        {
           // c3++;
           c3 = c3 +1;
            system("clear");
            printf("Voto confirmado, obrigado por votar!\n\n\n");
            sleep (5);

        }
        if(confirmador==2)
        {
            votar();
        }
        if((confirmador!=1)&&(confirmador!=2))
        {
            system("clear");
            printf("Opcao invalida, digite 1 para CONFIRMAR ou 2 para CANCELAR.");
        }
        votar();
        break;

    case 4:

        system("clear");
        printf("Seu candidato é: JULIA \nConfirma o voto? \n\n1-CONFIRMA\n2-CANCELAR\n\n");
        scanf("%d",&confirmador);

        if(confirmador==1)
        {
           // c4++;
           c4 = c4 +1;
            system("clear");
            printf("Voto confirmado, obrigado por votar!\n\n\n");
            sleep (5);

        }
        if(confirmador==2)
        {
            votar();
        }
        if((confirmador!=1)&&(confirmador!=2))
        {
            system("clear");
            printf("Opcao invalida, digite 1 para CONFIRMAR ou 2 para CANCELAR.");
        }

    default:

        system("clear");
        printf("Candidato invalido, digite o numero do partido. \n\n");
        sleep(5);

        }

votar();

}

int apuracao(int c1, int c2, int c3, int c4, int nulo) {

printf("*****************************************\n");
printf("ELEICOES 2016 - PESQUISA - PREFEITOS\n");
printf("*****************************************\n");

printf("\nJOAO: %d VOTOS\n",c1);
printf("\nJOAQUIM %d VOTOS\n",c2);
printf("\nJOANA: %d VOTOS\n",c3);
printf("\nJULIA: %d VOTOS\n",c4);
printf("\nBRANCOS OU NULOS: %d VOTOS\n",nulo);


return 0;

}

int main() {


nulo = 0;
c1 = 0;
c2 = 0;
c3 = 0;
c4 = 0;
printf("*****************************************\n");
printf("ELEICOES 2016 - PESQUISA - PREFEITOS\n");
printf("*****************************************\n");

printf("\n\nBem-vindo(a) a pesquisa eleitoral 2016.\nEste programa e experimental e de codigo livre.\nPara encerrar a sessao, basta digitar 999 no campo candidato.\nPara iniciar aperte qualquer tecla.\n\n");
getchar();

votar();

return 0;

}
  • Much Obragado for his response and the others who helped in the conclusion of the program, now it is the way I idealized!

1

You Zera the variables every time the voting function is called.

Declare the count variables outside the function, so they will become global, and will not have their value reset.

Another option is to place your voting logic within a loop :

while(candidato != 999){
  // faça a leitura e atribua um novo valor à variável candidato.

}

When you exit the loop you display the count.

1

Its "vote" function is recursive, i.e., it is called again internally!

Recursive functions have their usefulness, but are used relatively little.

In your case, at each recursive call the count variables are all zeroed!

Try to rewrite the exercise without using a recursive function, which is unnecessary in this case.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.