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>
#include <stdlib.h>
#include <string.h>
#define N_PESSOAS 5
#define TAM_NOME 100
#define TAM_END 150
#define TAM_FONE 20
#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;
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);
}
const Pessoa *p1 = (const Pessoa *)a;
const Pessoa *p2 = (const Pessoa *)b;
return strcmp(p1->nome, p2->nome);
}
int main() {
Pessoa lista[N_PESSOAS];
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;
}