Ir ao conteúdo

Posts recomendados

Postado

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
Postado

@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

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