Ir ao conteúdo
  • Cadastre-se

Algoritmo De Uma Urna Eletronica


Renata Santos

Posts recomendados

Ola,

Estou com um projeto da faculdade, fazer o algoritmo de uma Urna Eletronica em C, estou tendo dificuldades para cadastrar os eleitores, irei postar logo a baixo a parte que está dando erro.

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[])

{

int numero;

char *nome[100];

int linha;

// VETORES PARA ELEITORES

int num_eleitor [4];

char *nome_eleitor [4];

// VETORES PARA CANDIDATOS

int num_candidato [2];

char *nome_candidato [2];

char *partido [2];

int cargo [2]; // 1-> presidente, 2-> governador, 3-> senador

// CADASTRA ELEITORES

for (linha = 0; linha <= 3; linha++){

printf("digite o numero do eleitor \n");

scanf(" %d",&numero);

num_eleitor [linha] = numero;

printf("digite o nome do eleitor \n");

scanf(" %s",&nome);

nome_eleitor [linha] = nome;

}

// APRESENTA ELEITORES

printf("numero -- nome do eleitor\n");

for (linha = 0; linha <= 3; linha++){

printf (" %d",num_eleitor [linha]);

printf (" | %s",nome_eleitor [linha]);

printf ("|\n");

}

system("PAUSE");

return 0;

}

...quando vai imprimir... em vez de seguir a ordem do cadastro.. numero por numero, nome por nome, só imprime o nome do ultimo eleitor que foi cadastrado.. fazendo com que ele se repita varias vezes, nao consigo achar esse erro.

por favor.. alguem pode me ajudar??

Obrigada!

Link para o comentário
Compartilhar em outros sites

Você está criando array de char, mas não está alocando memória para as posições.

Ponteiro para um array de char. Você terá 100 posições de armazenamento, mas não possui memória alocada para armazenar o nome.


char *nome[100];

Você precisará fazer algo do tipo:


char *nome[100];
int i;
for ( i = 0; i< 100; i++ )
nome[i] = malloc( sizeof(char) *50 ); // Alocando espaço para 50 caracteres por nome

Precisará fazer esse tipo de alocação para cada ponteiro de char que você possuir.

Ou então, usar alocação estática:


char nome[100][50];

Poderá acessar diretamente assim.

Link para o comentário
Compartilhar em outros sites

É aquilo lá que o ScreenBlack disse.

Você tá fazendo confusão na hora de guardar as strings.

char *nome[100]; ---> isso aqui é um array de ponteiros do tipo char*. É como se fosse o endereço de 100 strings.

scanf(" %s",&nome); ---> aqui você tá passando pro scanf o endereço do primeiro ponteiro. Nem sei como o compilador não acusou erro aqui.

nome_eleitor [linha] = nome; ---> como o C não possui strings reais (apenas array de char), esse tipo de associação é errada. Normalmente você não poderia fazer uma string ser igual a outra assim, teria que usar a função strcpy(). Mas como suas strings na verdade estão como ponteiros de string, você tá passando o endereço de uma pra outra... não é uma coisa boa. No final todas as suas strings apontam pra mesma string, e ficam imprimindo tudo a mesma coisa.

Pelo que entendi no código "nome" é apenas uma variável temporária pra você salvar os nomes e passar pra outra string, certo?

Então declare ele apenas como:

char nome[100];

E pelo que entendi, nome_eleitor vai guardar os nomes dos eleitores cadastrados:

char nome_eleitor[4][100];

Na hora de cadastrar eleitores você usa:

scanf("%s", nome);

strcpy(nome_eleitor[linha], nome);

Pra usar a função strcpy precisa incluir no começo do código a #include <string.h>

Link para o comentário
Compartilhar em outros sites

Arquivado

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

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!