dark_wolk 0 Denunciar post Postado Outubro 15, 2008 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
_Isis_ 202 Denunciar post Postado Outubro 15, 2008 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
dark_wolk 0 Denunciar post Postado Outubro 15, 2008 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
gRoOvE 0 Denunciar post Postado Outubro 19, 2008 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