Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

dark_wolk

Alocacao dinamica

Recommended Posts

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,,,

Compartilhar este post


Link para o post
Compartilhar em outros sites

Algumas coisas.

 

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;

 

Bom,eu só uso goto quando do-while e while não dão conta ou ficam muito cheios de if e estão aninhados em alguma outra coisa. Aqui da pra deixar com do { ... } while (op == 2)

 

 

 

gets(candidatos[cont].nomeCompleto);

 

Não use gets!!!

 

 

while (1) {
	  printf("\t\t	----URNA 2008----\n\");		  
	  printf("\nEntre com a opcao: ");
	  scanf("%d",&opcao);
	  if (opcao == 0)
			exit(0);

	  switch(opcao){		 
		 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");
	  }
 }

 

Dá erro quando você tenta fazer o quê?

Compartilhar este post


Link para o post
Compartilhar em outros sites

andei fazendo algumas correcoes e problema agora se limita a ora de reallizar a votocao...

 

 

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

#define LINUX 0
#define WINDOWS 1
#define UNKNOWN 2

int plataforma = UNKNOWN;

struct Eleitor
{
   int numeroTitulo;	 
};
struct Eleitor *eleitores;

struct Candidato
{
   char nomeCompleto[50];
   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++)
	 {
		printf("\tNome do do candidato : ");
		scanf("%s", candidatos[cont].nomeCompleto);getchar();
		printf("\tSexo: ");
		candidatos[cont].sexo = getchar();
		printf("\tNumero: ");
		scanf("%d",&candidatos[cont].numero);
	 }

	 getchar();
	 getchar();
}
void listaCandidatos()//Lista os candidatos
{
	int i;
	for(i = 0;i < numCand;i++)
	{
		printf("\n\tNome: %s\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;

		printf("\nEntre com o numero do candidato: ");
		scanf("%d",&voto);
		printf("\t1 - CONFIRMAR\n\t2 - CORRIGE\n");
		scanf("%d",&op);
		do{
		   if(op == 1)
		   {
			for(i = 0;i < numEleitores;i++)  
				  if(voto == candidatos[i].numero)
						  candidatos[i].votos++;
						  }
		}while(op == 2);

		votos[eleitores[i].numeroTitulo] = 1;
		qtdVotantes++;
		i++;

	}while(eleitores[i].numeroTitulo != 0 && qtdVotantes < numEleitores);
	
	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: %s\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 dizComando()
{
	if (plataforma == LINUX) 
	   system("clear");
	else if (plataforma == WINDOWS) 
	   system("cls");
}

void limpaTela()
{
	if ((-1 != system("clear")))
	   plataforma = WINDOWS;
	else if ((-1 != system("cls")))
	   plataforma = LINUX;
					  
	dizComando();
}	 
void trataOpcao()//Mostra menu e verifica a escolha chamando cada funcao correspondente
{
	 int opcao;		   
	 while(1){
		  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();limpaTela();break;
			 case 2:realizaVotacao();limpaTela();break;
			 case 3:listaEleitores();limpaTela();break;
			 case 4:listaCandidatos();limpaTela();break;
			 case 5:mostraResultado();limpaTela();break;
			 case 6:abrirReadme();limpaTela();break;
			 default:printf("\aOpcao invalida! Tente outra vez...\n");
		  }
	 }
}

int main(int argc, char *argv[])
{	   
		trataOpcao();	 
		return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara, não entendi essa função limpaTela(), como faz pra saber qual SO o usuário está usando?

 

void limpaTela()
{
	if ((-1 != system("clear")))
	   plataforma = WINDOWS;
	else if ((-1 != system("cls")))
	   plataforma = LINUX;
					  
	dizComando();
}

Repare que na função realizaVotacao(), você está fazendo a alocação de forma errada, tentanto retornar um ponteiro do tipo Struct* Eleitor para um ponteiro para inteiros(int* votos)...pra falar a verdade não entendi o uso desse ponteiro int* votos "/

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.