Ir ao conteúdo
  • Cadastre-se

C Programar um código para a criação de vetores para armazenar nomes


Posts recomendados

Crie um programa que receba o nome dos 8 candidatos em um vetor de strings, onde cada string tem tamanho máximo igual a 30. O programa deve repetidamente apresentar o nome dos candidatos e perguntar ao público (usuário) quem deve sair até que haja apenas três candidatos. Na fase final o público deve escolher quem dentre os três candidatos deve vencer o programa.

 

Eu consegui fazer até a parte que o usuário informa os 8 nomes, mas eu não sei como remover o nome dos candidatos a cada iteração. Alguém pode me ajudar?

 

 

 

 

#include<stdio.h>

int main(){
char vetor1[30], vetor2[30], vetor3[30], vetor4[30];
char vetor5[30], vetor6[30], vetor7[30], vetor8[30];
int i;

 

printf("Digite o primeiro candidato: ");
scanf("%s", &vetor1);

 

printf("Digite o segundo candidato: ");
scanf("%s", &vetor2);

 

printf("Digite o terceiro candidato: ");
scanf("%s", &vetor3);

 

printf("Digite o quarto candidato: ");
scanf("%s", &vetor4);

 

printf("Digite o quinto candidato: ");
scanf("%s", &vetor5);

 

printf("Digite o sexto candidato: ");
scanf("%s", &vetor6);

 

printf("Digite o setimo candidato: ");
scanf("%s", &vetor7);

printf("Digite o oitavo candidato: ");
scanf("%s", &vetor8);

 

printf("Quem dever sair?\n");

 

return 0;

}

  • Amei 1
Link para o comentário
Compartilhar em outros sites

@Emerson2156547384729849    vetores não é bem isso não ,  você precisa especificar a qtd de elementos que terá o vetor , e  usando para isso os colchetes   "  [  ]  "  , mais ou menos assim :

int vetor;        // aqui uma variáveL simples do tipo int que pode guardar apenas um único numero
int vetor[8];     // aqui um vetor do tipo int com 8 elementos e pode guardar até 8 numeros
char nome[31];    // aqui uma string simples que pode armazenar até 30 caracteres
char nome[8][31]; // aqui um vetor de char , que na linguagem c é considerado uma string , 
                  // e com 8 elementos de 30 posições cada um , e pode guardar até 8 frases 
                  // que tenha até 30 caracteres , "letras espaços ou símbolos "   , sendo que
                  // o último , na posição 31 , será usado para o finalizador de string '\0'

enyão essa primeira parte de seu código poderia ser assim  :

#include<stdio.h>
#include<windows.h>
int main()
{
    //char vetor1[30], vetor2[30], vetor3[30], vetor4[30];
    //char vetor5[30], vetor6[30], vetor7[30], vetor8[30];  nãoé bem isso não !
    char nome[8][30]; // poderia ser assim
    int i;
    for(i=0; i<8; i++)// melhor usar um laço de repetição
    {
        printf("%d candidato: ",i+1);
        scanf("%s", nome[i]);// não precisa deesse & pois já tem o endereço
    }
/*  aqui são comentarios e pode deletar
    printf("Digite o segundo candidato: ");
    scanf("%s", &vetor2);
    printf("Digite o terceiro candidato: ");
    scanf("%s", &vetor3);
    printf("Digite o quarto candidato: ");
    scanf("%s", &vetor4);
    printf("Digite o quinto candidato: ");
    scanf("%s", &vetor5);
    printf("Digite o sexto candidato: ");
    scanf("%s", &vetor6);
    printf("Digite o setimo candidato: ");
    scanf("%s", &vetor7);
    printf("Digite o oitavo candidato: ");
    scanf("%s", &vetor8);
    printf("Quem dever sair?\n");
*/
    return 0;
}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Você pode criar um vetor de 8 inteiros incialmente com valor 1 em todas as posições e conforme os candidatos forem eliminados você atribui o valor 0, exibindo dentro de um loop apenas as posições com valor 1 e usando o mesmo índice para os dois arrays.

 

Para fazer a comparação basta usar

 if (c[indice]) {
	// seu código
 }

já que 0 é equivalente a falso e demais valores a verdadeiro.

 

E para definir o candidato a ser eliminado você pode usar outro vetor para contar os votos ou criar uma array de inteiros bidimensional com o um índice secundário indicando se o candidato está eliminado ou não e o outro para contar o número de votos.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Emerson2156547384729849   olá , e o que o @JorgeGus   disse realmente procede ,  e não tem jeito de deletar nada da memória ,   que é onde está armazenado os nomes ,   pois quando você cria a variáveL , já tem alguma coisa guardada naquela mesma posição , então o que você pode fazer é adicionar um valor qualquer na posição do nome que você quer deletar , e assim através de comparações você verifica o valor da variável e se for o que você marcou como deletado , então ignore essa  e passa para outra ,  e no caso de ser um vetor ,  você pode puxar os nomes que estão acima desse que se quer deletar , para baixo e assim tal nome será eliminado e depois decrementa o contador de nomes , pois foi deletado hum .  e então faça essa parte e poste aqui , para ajudarmos caso precise de alguma correção   .

Link para o comentário
Compartilhar em outros sites

Exemplo de como eliminar os candidatos.

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

#define T_NOME 30
#define Q_CANDIDATOS 8

#define T_BUFFER 256

/* Colocação de cada candidato */
const char *COLOCACAO[] = {"primeiro",
                           "segundo",
                           "terceiro",
                           "quarto",
                           "quinto",
                           "sexto",
                           "setimo",
                           "oitavo",
                           "nono",
                           "decimo"};


int main(void)
{
    int contador, opcao;
    /* Os candidatos restantes */
    int rest_candidatos[Q_CANDIDATOS] = {0};
    int total_candidatos = 0;
    /* Cria uma matriz de caracteres */
    char candidatos[Q_CANDIDATOS][T_NOME];
    char buffer[T_BUFFER];      /* Buffer para ser usado no teclado */

    /* Pega os nomes dos candidatos */
    for (contador = 0; contador < Q_CANDIDATOS; contador++) {
        printf("Digite o nome o %s candidato\n", COLOCACAO[contador]);
        do {
            /* Pega a entrada do teclado */
            if (fgets(buffer, T_BUFFER, stdin) != NULL) {
                /* Verifica se a entrada é valída */
                if (buffer[0] != '\n' && strlen(buffer) < T_NOME-1) {
                    strcpy(candidatos[contador], buffer);
                    /* Sinaliza que o cadidato e valido */
                    rest_candidatos[contador] = 1;
                    total_candidatos++;
                } else {
                    printf("Digite uma entrada valida!\n");
                }
            }
        /* Repete novamente se a entrada for invalida */
        } while (buffer[0] == '\n' || strlen(buffer) > T_NOME-1);
    }

    printf("Total de candidatos no sistema %d\n", total_candidatos);

    do {
        /* Mostra os candidatos restantes no sistema */
        printf("Total de candidatos restantes %d\n", total_candidatos);
        for (contador = 0; contador < Q_CANDIDATOS; contador++) {
            if (rest_candidatos[contador] == 1)
                printf("%d-%s candidato %s", contador+1, COLOCACAO[contador], candidatos[contador]);
        }

        printf("Digite o numero do candidato para ser eleminado\n");
        /* Pega a posição do candidato */
        do {
            if (fgets(buffer, T_BUFFER, stdin) != NULL) {
                if (sscanf(buffer, "%d", &opcao) != 1) {
                    printf("Digite uma opcao valida!\n");
                    opcao = -1;
                }
            }
        } while (opcao < 1 || opcao > Q_CANDIDATOS);

        if (rest_candidatos[opcao-1] == 1) {
            printf("Candidato %s\teliminado!\n", candidatos[opcao-1]);
            /* Retira o candidato */
            rest_candidatos[opcao-1] = 0;
            total_candidatos--;
        } else {
            printf("O candidato ja foi eleminado!\n");
        }
    } while (total_candidatos > 3);

    printf("Candidatos restantes\n");
    for (contador = 0; contador < Q_CANDIDATOS; contador++) {
        if (rest_candidatos[contador] == 1) {
            printf("%s", candidatos[contador]);
        }
    }
    getchar();
    return(0);
}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

22 horas atrás, Emerson2156547384729849 disse:

Eu consegui fazer até a parte que o usuário informa os 8 nomes, mas eu não sei como remover o nome dos candidatos a cada iteração

 

Faça como no bubble sort: troque com o candidato no final da lista e diminua o tamanho da lista de candidatos

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Para ir removendo o nome das opções você pode atribuir 0 a posição do nome no próprio vetor. E com um contador saberá quantos ficam para sair quando chegar a 3, p.ex,

 

while(1){
    int conta = 0;
    int indice;
    printf("Quem deve sair?\n");
    for(int i = 0; i < 8; i += 1){
        if(vetor[i][0]){
            printf("%d - %s\n",i + 1, vetor[i]);
            conta += 1;
        }
    }
    if(conta == 3){
        break;
    }
    scanf("%d",&indice);
    vetor[indice - 1][0] = 0;
}

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 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...