Alocacao dinamica
diz aew galera, preciso terminar o programa da eleicao, ja tinha colocado tópicos aq sobre isso, e tinha concertado o programa fazendo alocacao dinamica...
so q agora tah dando erro e eu num consigo descubrir o porquê se alguem puder me ajude....
#include<stdio.h>
#include<stdlib.h>
#include <string.h>
struct Eleitor
{
int numeroTitulo;
};
struct Eleitor *eleitores;
struct Candidato
{
char nomeCompleto;
int numero;
char sexo;
int votos;
};
struct Candidato *candidatos;
int numCand,numEleitores;
void cadastraCandidato()//Cadastra os candidatos
{
int cont;
printf("Entre com a qtda. de candidatos: ");
scanf("%d",&numCand);
candidatos = (struct Candidato*) malloc(numCand*sizeof(struct Candidato));
for(cont = 0;cont < numCand;cont++)
{
candidatos[cont].nomeCompleto = (char *) malloc(50* sizeof(char));
printf("\tNome do do candidato : ");
gets(candidatos[cont].nomeCompleto);
candidatos[cont].sexo = (char *) malloc(10*sizeof(char));
printf("\tSexo: ");
gets(candidatos[cont].sexo);
printf("\tNumero: ");
scanf("%d",&candidatos[cont].numero);
}
free(candidatos);
getchar();
getchar();
}void listaCandidatos()//Lista os candidatos
{
int i;
for(i = 0;i < numCand;i++)
{
printf("\n\tNome: %c\n",candidatos[i].nomeCompleto);
printf("\tSexo: %c\n",candidatos[i].sexo);
printf("\tNumero: %d\n",candidatos[i].numero);
}
getchar();
getchar();
}void realizaVotacao()//Guarda os votos
{
int i,voto,qtdVotantes,op;
int *votos;
printf("Entre com a qtd. de eleitores: ");
scanf("%d",&numEleitores);
votos = (struct Eleitor*) malloc(numEleitores*sizeof(struct Eleitor));
for(i = 0;i < numEleitores;i++)
votos[i] = 0;
qtdVotantes = 0;
i = 0;
do
{
eleitores[i].numeroTitulo = i*i;
CORRIGE:
printf("\nEntre com o numero do candidato: ");
scanf("%d",&voto);
printf("\t1 - CONFIRMAR\n\t2 - CORRIGE\n");
scanf("%d",&op);
if(op == 1)
{
for(i = 0;i < numEleitores;i++)
if(voto == candidatos[i].numero)
candidatos[i].votos++;
}
else if(op == 2)
goto CORRIGE;
votos[eleitores[i].numeroTitulo] = 1;
qtdVotantes++;
i++;
}while(eleitores[i].numeroTitulo != 0 && qtdVotantes < numEleitores);
free(votos);
getchar();
getchar();
}void listaEleitores()//Lista os eleitores
{
int i;
for(i = 0;i < numEleitores;i++)
printf("\tTitulo: %d\n",eleitores[i].numeroTitulo);
getchar();
getchar();
}
void mostraResultado()//Mostra resultado da eleicao
{
int i;
for(i = 0;i < numCand;i++)
{
printf("Numero: %d\n",candidatos[i].numero);
printf("Prefeito: %c\n",candidatos[i].nomeCompleto);
printf("Sexo: %c\n",candidatos[i].sexo);
printf("Votos: %d\n\n", candidatos[i].votos);
}
getchar();
getchar();
}void abrirReadme()//Abrir o readme
{
FILE *arquivo;
char letra;
arquivo = fopen("readme.txt", "r");
if (arquivo == NULL) {
printf("Erro ao tentar abrir o arquivo.\n");
}
while (!feof(arquivo)) {
fscanf(arquivo, "%c", &letra);
printf("%c", letra);
}
fclose(arquivo);
getchar();
getchar();
}
void trataOpcao()//Mostra menu e verifica a escolha chamando cada funcao correspondente
{
int opcao;
do{
printf("\t\t ----URNA 2008----\n\
=======================================\n\
| 1 - Cadastrar candidatos\t\t|\n\
| 2 - Iniciar votacao\t\t\t|\n\
| 3 - Listar eleitores\t\t|\n\
| 4 - Listar candidatos\t\t|\n\
| 5 - Fechar votacao\t\t\t|\n\
| 6 - Abrir README\t\t\t|\n\
| 0 - Sair\t\t\t\t|\n\
=======================================\n");
printf("\nEntre com a opcao: ");
scanf("%d",&opcao);
switch(opcao){
case 0:exit(0);break;
case 1:cadastraCandidato();break;
case 2:realizaVotacao();break;
case 3:listaEleitores();break;
case 4:listaCandidatos();break;
case 5:mostraResultado();break;
case 6:abrirReadme();break;
default:printf("\aOpcao invalida! Tente outra vez...\n");
}
}while(opcao != 0);
}
int main(int argc, char *argv[])
{
trataOpcao();
return 0;
}eu estou em duvida se o problema eh nos malloc ou na leitura,,,
Discussão (3)
Carregando comentários...