Utilizando uma estrutura, faça um programa que permita a entrada de nome, endereço e telefone de 5 pessoas e os imprima em ordem alfabética.

Passo 1

O problema pede um programa em C que armazene nome, endereço e telefone de 5 pessoas usando uma struct e depois imprima esses dados em ordem alfabética de nome.

Passo 2

Definimos uma struct Pessoa com três campos: nome, endereco e telefone. Declaramos um array de 5 elementos desse tipo.

Passo 3

Para ordenar alfabeticamente pelo nome, escrevemos uma função de comparação que usa strcmp para comparar os campos nome das duas pessoas.

Passo 4

No main: percorremos o array pedindo ao usuário para digitar nome, endereço e telefone de cada pessoa, usando fgets ou scanf adequadamente. Depois de ler todos os dados, chamamos qsort passando o array, o número de elementos, o tamanho da struct e a função de comparação.

Passo 5

Por fim, percorremos o array já ordenado e imprimimos nome, endereço e telefone de cada pessoa.

Resposta

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N_PESSOAS 5
#define TAM_NOME 100
#define TAM_END 150
#define TAM_FONE 20
typedef struct {
char nome[TAM_NOME];
char endereco[TAM_END];
char telefone[TAM_FONE];
} Pessoa;
int comparaNome(const void *a, const void *b) {
const Pessoa *p1 = (const Pessoa *)a;
const Pessoa *p2 = (const Pessoa *)b;
return strcmp(p1->nome, p2->nome);
}
int main() {
Pessoa lista[N_PESSOAS];
for (int i = 0; i < N_PESSOAS; i++) {
    printf("Digite o nome da pessoa %d: ", i+1);
    fgets(lista[i].nome, TAM_NOME, stdin);
    lista[i].nome[strcspn(lista[i].nome, "\n")] = '\0';

    printf("Digite o endereco da pessoa %d: ", i+1);
    fgets(lista[i].endereco, TAM_END, stdin);
    lista[i].endereco[strcspn(lista[i].endereco, "\n")] = '\0';

    printf("Digite o telefone da pessoa %d: ", i+1);
    fgets(lista[i].telefone, TAM_FONE, stdin);
    lista[i].telefone[strcspn(lista[i].telefone, "\n")] = '\0';

    printf("\n");
}

qsort(lista, N_PESSOAS, sizeof(Pessoa), comparaNome);

printf("Lista ordenada por nome:\n");
for (int i = 0; i < N_PESSOAS; i++) {
    printf("\nPessoa %d:\n", i+1);
    printf("Nome: %s\n", lista[i].nome);
    printf("Endereco: %s\n", lista[i].endereco);
    printf("Telefone: %s\n", lista[i].telefone);
}

return 0;
}

Exercícios relacionados