Ir ao conteúdo

Exercício em C


hsichigoo

Posts recomendados

Postado

Estou com problemas para ordenar os valores de uma struct...

se alguém puder me ajudar...

Eu preciso ordenar os carros por data de fabricação.


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

void addMostrar();
void addCarros();
void ordFab();
void ordModelo();
void ordCor();
void compara(char n1[30], char n2[30]);

char aux[20];
struct carro
{
char ano[10];
char modelo[20];
char cor[15];
char portas;
}c1, c[5];

void compara(char n1[30], char n2[30])
{
if(strcmp(n1, n2) > 0)
{
strcpy(aux, n1);
strcpy(n1, n2);
strcpy(n2, aux);
}
}

void addMostrar()
{
fflush(stdin);
system("cls");

printf("digite o modelo do carro: ");
gets(c1.modelo);
fflush(stdin);
printf("digite o ano do carro: ");
gets(c1.ano);
fflush(stdin);
printf("digite a cor do carro: ");
gets(c1.cor);
fflush(stdin);
printf("digite o numero de portas: ");
getche(c1.portas);
fflush(stdin);

system("cls");

printf("modelo: %s\tano fab.: %s\tcor: %s\tportas: %c\n", c1.modelo, c1.ano, c1.cor, c1.portas);
getch();
}

void addCarros()
{
system("cls");
int i;
//struct carro c[5];

fflush(stdin);
for(i=0;i<5;i++)
{
printf("digite o ano do %d%c carro: ", i+1, 167);
gets(c[i].ano);
fflush(stdin);
printf("digite o modelo do %d%c carro: ", i+1, 167);
gets(c[i].modelo);
fflush(stdin);
printf("digite a cor do %d%c carro: ", i+1, 167);
gets(c[i].cor);
fflush(stdin);
printf("digite o numero de portas do %d%c: ", i+1, 167);
scanf("%c", &c[i].portas);
fflush(stdin);
printf("\n\n");
}
system("cls");
}

void ordFab()
{
system("cls");
int i, j;
for(j=0;j<5;j++)
for(i=0; i<5-1; i++)
compara(c[i].ano, c[i+1].ano);

for(i=0;i<5;i++)
printf("modelo: %s\tano fab.: %s\tcor: %s\tportas: %c\n\n",c[i].modelo, c[i].ano, c[i].cor, c[i].portas);

getch();
system("cls");
}

int main()
{
int sair = 0, op;

while(sair == 0){

printf("Escolha uma das opções:\n");
printf("1 - Adicionar e mostrar\n");
printf("2 - Cadastrar 5 carros\n");
printf("3 - Ordenar por fabricação\n");
printf("4 - Ordenar por modelo\n");
printf("5 - Ordenar por cor\n");
printf("6 - Sair\n\n");

printf("--> ");
scanf("%d",&op);

switch(op)
{
case 1:
addMostrar();
break;

case 2:
addCarros();
break;

case 3:
ordFab();
break;

case 4:
// ordModelo();
break;

case 5:
// ordCor();
break;

case 6:
sair = 1;
break;

default:
printf("opcao invalida !\n\n");
break;
}
}

system("pause");
return 0;
}

valeu

Postado

Você está passando uma parte da struct (uma string), ordenando somente ela e não retorna valor nenhum. É como se não tivesse feito nada.

Primeiro: trabalhe com ponteiros para struct carro ao invés de ordenar diretamente as estruturas, pois ficar jogando o monte de bytes da estrutura de um lado para o outro da memória não é inteligente. Usando ponteiros as estruturas ficam paradas mas os ponteiros vão sendo ordenados, como se "representassem" a estrutura em seu nome.


struct carro* aux[5], *temp;

...
...
if(strcmp(aux[i]->ano, aux[i+1]->ano) > 0)
{
temp = aux[i+1];
aux[i+1]=aux[i];
aux[i]=temp;
}

  • 2 semanas depois...

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!