Ir ao conteúdo
  • Cadastre-se

C Struct : Imprimir em Ordem Alfabética


Dafne Guimarães

Posts recomendados

Estou tendo problemas em impirmir em ordem alfabetica. Na verdade o programa nem está querendo rodar, ele entra naquela aba de MAKEFILE "    $(CC) $(LINKOBJ) -o $(BIN) $(LIBS)".

 

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

/*Construa uma estrutura aluno com nome, número de matrícula e curso. O usuário irá digitar a
informação de 5 alunos. O programa deverá armazenar em um vetor dessa estrutura e,
posteriormente, deverá imprimir os dados lidos em ordem alfabética.*/

typedef struct { //definindo a estrutura
	char nome;
	int num;
	int num_matri;
	char curso;
} ficha_cadastral;

	int main() {
	int i, num, num_matri;
	char nome, curso, aux;
	ficha_cadastral vet_pessoa[5];
	
	for(i=0; i<5; i++){
	printf("Digite o seu nome:\n");
	scanf("%s", &vet_pessoa[i].nome);
	
	printf("Digite o seu numero:\n");
	scanf("%d", &vet_pessoa[i].num);
	
	printf("Digite o seu numero da matricula:\n");
	scanf("%d", &vet_pessoa[i].num_matri);
	
	printf("Digite o seu curso:\n");
	scanf("%s", &vet_pessoa[i].curso);

	}
	
	printf("\nPessoas em ordem alfabetica:\n");
	for(i=0; i<5; i++){
	 if(vet_pessoa[i].nome> vet_pessoa[i+1].nome) {
    	 strcopy(aux, vet_pessoa[i].nome);
    	 strcopy(vet_pessoa[i].nome, vet_pessoa[i+1].nome);
    	 strcopy(vet_pessoa[i+1].nome, aux);
    }
	printf("NOME: %s\n", vet_pessoa[i].nome);
	
	}
}

 

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

@Dafne Guimarães    para ordenar  em ordem crescente você pode usar a posição zero do vetor de struct como auxiliar na hora de fazer a ordenação, então você precisa deixar essa posição zero sem nada nela e comece a inserir seus dados a partir da posição hum do vetor struct e sendo assim seu vetor terá que ter 6 posições uma para você usar como auxiliar e as outras cinco para você colocar seus dados, e os nomes serão ordenados por ordem alfabética pela primeira letra do nome sendo que as letras seguintes não interferirão na ordenação  e usei o comando strcoll para verificar se o código acii da letra é maior que o da outra letra,  e também usei o comando gets pois o scanf apresenta menssagens de warning mas funciona certo também se quiser pode usa-lo .  e também coloque esse fflush(sdin) pois precisa deles quando se usa gets  senão dá erro .     seu código com algumas modificações ficaria assim :

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

/*Construa uma estrutura aluno com nome, número de matrícula e curso. O usuário irá digitar a
informação de 5 alunos. O programa deverá armazenar em um vetor dessa estrutura e,
posteriormente, deverá imprimir os dados lidos em ordem alfabética.*/

typedef struct { /*//definindo a estrutura*/
	char nome[30];
	int num;
	int num_matri;
	char curso[20];
} ficha_cadastral;

int main() {
	int i,j;
	ficha_cadastral vet_pessoa[6];

	for(i=1; i<6; i++){
	    printf("Digite o seu nome:\n");
	    fflush(stdin);
	    gets(vet_pessoa[i].nome);

	    printf("Digite o seu numero:\n");
	    fflush(stdin);
	    scanf("%d", &vet_pessoa[i].num);

	    printf("Digite o seu numero da matricula:\n");
	    fflush(stdin);
	    scanf("%d", &vet_pessoa[i].num_matri);

	    printf("Digite o seu curso:\n");
	    fflush(stdin);
	    gets(vet_pessoa[i].curso);

	}

	printf("\nPessoas em ordem alfabetica:\n");
	for(i=1; i<6; i++){
        for(j=i+1;j<6;j++){
	        if(strcoll(vet_pessoa[i].nome , vet_pessoa[j].nome) > 0 ){
                vet_pessoa[0]=vet_pessoa[i];
                vet_pessoa[i]=vet_pessoa[j];
                vet_pessoa[j]=vet_pessoa[0];
	        }
        }
	}
	for(i=1;i<6;i++){
        printf("NOME: %s\n",vet_pessoa[i].nome);
	}
	return 0;
}

 

  • Curtir 1
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...