Ir ao conteúdo
  • Cadastre-se
Cortella

C Urna Eletrônica - Erro Desconhecido

Recommended Posts

Bom dia, estou com um trabalho da faculdade para programar uma urna em C, porém no voto para presidente quando digito um numero de um candidato existente e confirmo o voto, o programa soma o voto normalmente e entra no if referente ao voto nulo por motivos desconhecidos.

Já tentei dar printf tanto no array "voto" como no variavel "char" confirma, nenhum deles apresentou alteração, se alguém puder me ajudar ficaria agredecido!!!

#include <stdio.h>
#include <conio.h>
#include <string.h>
#define TAM_MAX 40

struct candidato{
	char numero[5];
	char nome[TAM_MAX];
	char partido_sigla[5];
	char nome_partido[TAM_MAX];
	int voto;
};

struct candidato presidente[5]={
	{"91","Futebol","PEsp","PARTIDO DOS ESPORTES"},
	{"92","Rock","PMus","PARTIDO DOS RITMOS MUSICAIS"},
	{"93","Professora","PProf","PARTIDO DAS PROFISSÕES"},
	{"94","Copa do Mundo","PFest","PARTIDO DAS FESTAS POPULARES"},
	{"95","Vitória-Régia","PFolc","PARTIDO DO FOLCLORE"},
};
int nulo_presidente,branco_presidente;
char voto[6];
void Presidente(){

		char confirma='n';
		while(confirma!='s'){ //ate que o voto seja confirmado a urna continuara a solicitar a entrada
			printf("\nPRESIDENTE: ");
			setbuf (stdin, NULL) ; // limpa buffer teclado
			voto[0]=getche(); //entrada sem digitar enter
			voto[1]=getche();
			int i=0;
			while(i<5){
				if(strcmp(voto,presidente[i].numero)==0){  //compara numero digitado com banco de dados
					printf("\nNome: %s",presidente[i].nome);
					printf("\nPartido : %s (%s)",presidente[i].partido_sigla,presidente[i].nome_partido);
					printf("\nConfirma?   :");
					scanf("%c",&confirma);
					if(confirma =='s'){
						presidente[i].voto++;
						break; 	//referente ao while mais interno;
						continue;	//referente ao while mais externo

					}
				}
			i++;
			}
			i=0; //caso precise entrar novamente no while de comparacao
			if(((voto<"91") || (voto>"95")) && (voto[0]!='b')){ // Voto nulo
				printf("\nNÚMERO ERRADO!!! ");
				printf("\nVOTO NULO ");
				printf("\nconfirma?  's'-> sim   'n'-> nao: ");
				scanf("%c",&confirma);
					if(confirma =='s'){
						nulo_presidente++;
						continue;
					}
			}
		if(voto[0]=='b'){ //voto em branco
			printf("\nVOTO EM BRANCO");
			printf("\nconfirma?  's'-> sim   'n'-> nao: ");
			scanf("%c",&confirma);
			if(confirma =='s'){
				branco_presidente++;
				continue;
			}
		}
	}
}

int main(){

Presidente();

printf("%s = %i \n",presidente[0].nome,presidente[0].voto);
printf("%s = %i \n",presidente[1].nome,presidente[1].voto);
printf("%s = %i \n",presidente[2].nome,presidente[2].voto);
printf("%s = %i \n",presidente[3].nome,presidente[3].voto);
printf("%s = %i \n",presidente[4].nome,presidente[4].voto);
printf("Nulos = %i \n",nulo_presidente);
printf("Brancos = %i \n",branco_presidente);


return 0;
}

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aqui merece uma obervação a parte.

 

2 horas atrás, Cortella disse:

if( confirma == 's' )
{	presidente[ i ].voto++;
	break;    //referente ao while mais interno;
	continue; //referente ao while mais externo
}
...
if(((voto<"91") || (voto>"95")) && (voto[0]!='b')){ // Voto nulo
				printf("\nNÚMERO ERRADO!!! ");
				printf("\nVOTO NULO ");
				printf("\nconfirma?  's'-> sim   'n'-> nao: ");
				scanf("%c",&confirma);
					if(confirma =='s'){
						nulo_presidente++;
						continue;
					}
			}

 

 

Uma boa função tem de 20 até 24 linhas, que para mim já é muito, porém ninguém menos que Linus Torvalds recomenda.

 

Outra coisa; quem já está estudando tipos abstratos não pode errar em coisa básica como essas, que não é novidade. Isso é coisa velha. O que é break? O que são strings em C? E como comparar strings em C? O que são literais?

 

Isso são coisas bem conhecidas, não tem nada de desconhecido, pelo contrário é assunto velho com mais de 60 anos. E  as respostas são muitas para quem sabe o que perguntar.

  • Obrigado 1
  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro amigo,
Primeiramente gostaria de agradecer a dica.
Tem dois meses que comecei a aprender a programar,então eu ainda tenho muito pouca experiência. Sou novo aqui e não sei como as coisas funcionam, porém só gostaria de obter alguma ajuda. Eu ficaria agradecido!

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Cortella     para comparar os votos você precisa converter as strings para inteiro usando o comando atoi  então seu código poderia ser assim  :

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#define TAM_MAX 40

struct candidato{
	char numero[5            ];
	char nome[TAM_MAX        ];
	char partido_sigla[5     ];
	char nome_partido[TAM_MAX];
	int  voto;
};

struct candidato presidente[5]={
	{"91","Futebol"      ,"PEsp" ,"PARTIDO DOS ESPORTES"        ,0},
	{"92","Rock"         ,"PMus" ,"PARTIDO DOS RITMOS MUSICAIS" ,0},
	{"93","Professora"   ,"PProf","PARTIDO DAS PROFISSÕES"      ,0},
	{"94","Copa do Mundo","PFest","PARTIDO DAS FESTAS POPULARES",0},
	{"95","Vitória-Régia","PFolc","PARTIDO DO FOLCLORE"         ,0},
};
int nulo_presidente,branco_presidente,maior=0;
char voto[6];
void Presidente(){

		char  confirma ='n' ;
		while(confirma!='s'){          /*ate que o voto seja confirmado a urna continuara a solicitar a entrada */
			printf("\nPRESIDENTE: ");
			setbuf (stdin, NULL    ) ; /* limpa buffer teclado      */
			voto[0]=getche();          /* entrada sem digitar enter */
			voto[1]=getche();
			int i=0;
			while(i<5){
				if(strcmp(voto,presidente[i].numero)==0){        /* compara numero digitado com banco de dados */
					printf("\nNome ------: %s",presidente[i].nome);
					printf("\nPartido ---: %s (%s)",presidente[i].partido_sigla,
                                                    presidente[i].nome_partido);
					printf("\nConfirma? -: ");
					scanf("%c",&confirma    );
					if(maior < strlen(presidente[i].nome))maior=strlen(presidente[i].nome);
					if(confirma =='s'){
						(presidente[i].voto++);
						break; 	            /* referente ao while mais interno; */
						continue;	        /* referente ao while mais externo  */

					}
				}
			    i++;
			}
			i=0;                            /* caso precise entrar novamente no while de comparacao */
			if(((atoi(voto)<91) || (atoi(voto)>95)) && (voto[0]!='b')){                /* Voto nulo */
				printf("\nNÚMERO ERRADO!!! ");
				printf("\nVOTO NULO ");
				printf("\nconfirma?  's'-> sim   'n'-> nao: ");
				scanf("%c",&confirma);
					if(confirma =='s'){
						nulo_presidente++;
						continue;
					}
			}
		if(voto[0]=='b'){                  /* voto em branco */
			printf("\nVOTO EM BRANCO");
			printf("\nconfirma?  's'-> sim   'n'-> nao: ");
			scanf("%c",&confirma);
			if(confirma =='s'){
				branco_presidente++;
				continue;
			}
		}
	}
}

int main(){
    char esp=' ';
    Presidente();

    printf("\n\n%13cPartido   Voto\n",esp);
    printf("\n\n%20s = %d\n"   ,presidente[0].nome,presidente[0].voto);
    printf("%20s = %d\n"       ,presidente[1].nome,presidente[1].voto);
    printf("%20s = %d\n"       ,presidente[2].nome,presidente[2].voto);
    printf("%20s = %d\n"       ,presidente[3].nome,presidente[3].voto);
    printf("%20s = %d\n"       ,presidente[4].nome,presidente[4].voto);
    printf("%15cNulos = %d\n"  ,esp               ,nulo_presidente   );
    printf("%13cBrancos = %d\n",esp               ,branco_presidente );


return 0;
}

 

  • Curtir 1
  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×