Incorrect counting in electronic ballot program

2

I created an urn with the C language. The code is apparently correct, but the vote count always hits zero. The code was developed in the code: blocks in Linux, so in order for it to work on windows, the lines of the sleep and system ("clear") commands should be changed or commented out.

Possible votes are 1, 2, 3 and 4 for candidates, 111 for white or null votes, and 999 for counting / closing of the ballot box.

Here is the code below:

#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;
}
    
asked by anonymous 27.09.2016 / 18:12

3 answers

2

Null, c1, c2, c3, c4, are now global, were missing two votes () and break, it was necessary to change the variables declaration of the voting function, and instead of using recursive function you should include your program in a infinite loop maybe 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;

}
    
27.09.2016 / 19:02
1

You zero the variables every time the vote function is called.

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

Another option is to put your voting logic inside 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.

    
27.09.2016 / 18:40
1

Your "voting" function is recursive, that is, it is called internally again!

Recursive function have their utility, but are used relatively little.

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

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

    
27.09.2016 / 18:48