Ir para conteúdo
Fórum Script Brasil

Pergunta

Primeiro obrigado já pela ajuda, segundo estou aprendendo C agora.

Estou fazendo um Trabalho em c, em que preciso ordenar o vetor de struct, fiz a função bubblesort, o programa compila certinho mas quando apresento o vetor ordenado ele embaralha tudo.

Segue o código abaixo obs. não liguem pra meus comentários, e pra min não se perder rsr

perguntas

1 - Como faço para na hora do BubbleSort está fazendo a troca ele perceba que o próximo índice do vetor esta vazio e pare?

2 - Também na hora de mostrar os dados do vetor ele perceba que o próximo índice está vazio? 

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
//Estrutura Clientes
struct Clientes{
	char nome[255];
	int cpf;
	char telefone[50];	
};
//Função ordena vetor CPF
void BubbleSort(int n,struct Clientes *clientes){
		int i,j;
		for (i=n-1; i>=1;i--){
			for(j=0;j<i;j++){
				if(clientes[j].cpf>clientes[j+1].cpf){
					/*TROCA*/
					char temp;
					temp = *clientes[j].nome;
					*clientes[j].nome = *clientes[j+1].nome;
					*clientes[j+1].nome = temp;
					
					int temp1;
					temp1 = clientes[j].cpf;
					clientes[j].cpf = clientes[j+1].cpf;
					clientes[j+1].cpf = temp1;
					
					char temp2;
					temp2 = *clientes[j].telefone;
					*clientes[j].telefone = *clientes[j+1].telefone;
					*clientes[j+1].telefone = temp2;
				}
			}
		}
}
//Função busca binaria

//Função Cadastra
void CadastrarCliente(struct Clientes *clientes){
int count = 0;
int Op = 1;

while (Op > 0){
	printf("\n Digite o nome do cliente \n");
	printf("\n NOME: ");
	scanf ( "%s",  clientes[ count ].nome );

	printf("\n Digite o CPF do cliente \n");
	printf("\n CPF: ");
	scanf ( "%d",  &clientes[ count ].cpf );
	
	printf("\n Digite o Telefone do cliente \n");
	printf("\n TELEFONE: ");
	scanf ( "%s",  &clientes[ count ].telefone );
	
	printf("\n Deseja Cadastrar mais um Cliente? \n");
	printf("\n 1 - SIM || 0 - NAO \n");
	printf("\n Escolha: ");
	scanf("%d", &Op);
	count++;
}

}
//---------------


main(){
//Vetor de Cleintes
struct Clientes clientes[50];


//-------------------------
//Menu
/*Variavel de Escolha*/
int Op = 1;
while(Op > 0){
printf("\n .:: ----- Sistemas de Clientes ----- ::.\n");
printf("\n ::::::::::::: MENU ::::::::::::: \n");
printf("\n 1 - Cadastrar Clientes | 2 - Mostra Cadastros \n");
printf("\n Escolha: ");
scanf("%d", &Op);
	//Cadastro Cliente
	if(Op == 1){
		CadastrarCliente(clientes);
	}
	//Fim Cadastro Cliente
	if(Op == 2){
		BubbleSort(50, clientes);
		int i=0;
		for(i;i<=4;i++){
          printf("Nome: %s\n", clientes [ i ].nome ); // Mesma coisa quando for exibir ou guarda usar sempre ||Vetor[posiçao].dado||
          printf("CPF: %d\n", clientes [ i ].cpf ); // Mesma coisa quando for exibir ou guarda usar sempre ||Vetor[posiçao].dado||
		}
	}
	//Retorno para o menu ou sair do programa
	printf("\n Deseja Retornar ao Menu? | SIM - 1 Nao - 0 | Escolha: ");
	scanf("%d",&Op);
	system("cls");
}
//Fim do Menu
}

obrigado já pela ajuda

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0
4 horas atrás, HugoGuedes disse:

1 - Como faço para na hora do BubbleSort está fazendo a troca ele perceba que o próximo índice do vetor esta vazio e pare?

Se vc declarar a estrutura tal como:

struct Clientes clientes[50]={0};

Todos os campos estarão estabelecidos a nulos. Se vc comparar o nome com "" vc saberá que não ha nome, e a consequência essa casinha estão vazia.
 

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

struct Clientes{
	char nome[255];
	int cpf;
	char telefone[50];	
};

int main(){
    setlocale(LC_ALL, "portuguese-brazilian");
    struct Clientes clientes[50]={0}; // tudo a nulos
    
    if ( strcmp( clientes[0].nome, "" ) == 0 ){ //Compara o nome da primeira casinha de com uma literal de nulos
        printf("Nome vazio"); // Se entrar aqui é que o nome esta vazio.
        
    }
    
    return 0;
}

Então a coisa é manter todas as posições que não estiver usando formatadas, para poder saber se por exemplo o nome não foi seteado ainda.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...