você pode fazer assim
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
#define NUM_REGISTROS 3
#define IDADE 1
#define NOME 2
typedef struct MeuDado{
char nome[32];
int idade;
} MEUDADO, *PMEUDADO;
void ordena( MEUDADO *, const int, const int);
void mostra( MEUDADO*, const int );
int main(int argc, char** argv) {
MEUDADO arrayDados[NUM_REGISTROS];
char type[20];
for( int count = 0; count < NUM_REGISTROS; count++)
{
printf("Digite um nome: ");
scanf("%s", &arrayDados[count].nome);
printf("Digite a idade: ");
scanf("%d", & arrayDados[count].idade);
}
for( int count = 0; count < NUM_REGISTROS; count++)
{
printf("\nDeseja ordenar por nome ou idade?");
scanf("%s", &type);
if( strcmp(type, "nome") == 0 || strcmp( type, "idade") == 0)
{
if( strcmp( type, "nome") == 0)
{
ordena( arrayDados, NUM_REGISTROS, NOME);
}
if( strcmp( type, "idade") == 0)
{
ordena( arrayDados, NUM_REGISTROS, IDADE);
printf("\nResultado: \n");
mostra(arrayDados, NUM_REGISTROS);
}
}else
{
printf("\nTipo indefinido dd");
}
}
return 0;
}
void mostra( MEUDADO *p, const int SIZE)
{
for( int j = 0; j < SIZE; j++)
{
printf("Nome: %s\nIdade: %d\n\n", p[j].nome, p[j].idade);
}
}
void ordena( MEUDADO *p, const int num, const int type){
void swap( MEUDADO *, MEUDADO *);
switch( type )
{
case NOME:
break;
case IDADE:
for( int a = 0; a < num; a++)
for(int j = 0; j < num; j++)
{
if( p[j].idade > p[j+1].idade)
{
swap( &p[j], &p[j+1]);
}
}
break;
default:
printf("\nTipo invalido! ff");
}
}
void swap( MEUDADO *p1, MEUDADO *p2)
{
MEUDADO controle;
controle = *p2;
*p2 = *p1;
*p1 = controle;
}
o codigo acima só faz ordenação por idade. a ordenação por nome fica a cargo de você