Problemas ao colocar struct em ordem alfabetica
Pessoal, estou fazendo um laboratorio de programação, e eu estou com um problema na hora de por os meus registros em ordem alfabética...
O programa é esse
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TAM 100
struct Cardapio{
char nome[20];
float preco;
short usado;
};
typedef struct Cardapio Cardapio;
//faz com que todas posicoes do vetor fiquem vagas
void iniciaCadastro(Cardapio vet[], int tam){
int i;
for(i=0; i<tam; i++)
{
vet[i].usado = 0;
}
}
//imprime o menusinho
void imprimeMenu(){
printf("0: sair do programa.\n");
printf("1: inserir um prato no cardapio.\n");
printf("2: remove um prato do cardapio.\n");
printf("3: lista os pratos em ordem alfabetica crescente de nome\n");
printf("4: lista os pratos em ordem crescente de preco\n");
}
//le os dados de um unico prato
void lePrato (Cardapio *p)
{
fprintf(stderr, "Digite o nome do prato:");
scanf("%s", &(*p).nome);
getchar();
fprintf(stderr, "Digite o preco do prato:");
scanf("%lf", &(*p).preco);
getchar();
}
//insere um prato
int inserePrato(Cardapio vet[], int tam, Cardapio p){
int i;
for(i=0; i<100; i++){
if(vet[i].usado == 0){ //se posicao i estiver vaga
vet[i] = p;
vet[i].usado = 1; //posicao i passa a estar usada
return 1;
}
}
return 0; //cadastro está cheio
}
//remove um prato
int removePrato(Cardapio vet[], int tam, char nome[]){
int i;
for(i=0; i<tam; i++){
//strcmp retorna 0 se as 2 strings parametros forem iguais
if(strcmp(vet[i].nome, nome) == 0){
vet[i].usado = 0; //posicao i fica vaga
return 1;
}
}
return 0; //prato não está cadastrado
}
//ordena o vetor
void ordemA(Cardapio nome[], int tam){
char aux;
int i = 0, j;
for(j=1; j<tam; j++)
{
aux = nome[j].nome;
i = j-1;
while(i >= 0 && strcmp(nome[i].nome,aux) > 0)
{
nome[i+1].nome = nome[i].nome;
i--;
}
nome[i+1].nome = aux;
}
}//funcao que imprime um unico prato
void imprimePrato(Cardapio p){
printf(" %-20s\n",p.nome);
printf("%6.2f\n", p.preco);
}
//funcao que imprime todos os pratos de um vetor
void imprimePratos(Cardapio vet[], int tam){
int i;
for(i=0; i<tam; i++){
if(vet[i].usado == 1){ //se posicao i conter algo valido entao imprime
imprimePrato(vet[i]);
}
}
}
int main(){
Cardapio pratos[TAM]; //pode-se armazenar até 100 pratos
Cardapio p;
int opcao=1, aux;
char nome[20];
iniciaCadastro(pratos, TAM);
do{
imprimeMenu();
scanf("%d", &opcao);//ok
if(opcao == 1)
{
lePrato(&p);
aux = inserePrato(pratos, TAM, p);
if(aux)
fprintf(stderr, "Prato cadastrado com sucesso!\n\n");
}//ok
if(opcao == 2)
{
fprintf(stderr, "Digite o nome do prato\n");
scanf("%s", nome);
aux = removePrato(pratos, TAM, nome);
if(aux)
fprintf(stderr, "Prato removido com sucesso!\n\n");
else
printf("Erro: prato nao encontrado.\n");
}
if (opcao == 3)
{
ordemA(pratos, TAM);
imprimePratos(pratos, TAM);
break;
}
if (opcao == 4)
{
/*
imprimeFrutas(frutas, TAM);
break;*/
}//ok
if(opcao == 0)
{
return 0;
}
if((opcao != 0) && (opcao != 1) && (opcao != 2) && (opcao != 3) && (opcao != 4))
{
printf("Erro: opcao invalida.\n");
}
}while(opcao != 0);
}
E quando eu compilo aparece o seguinte erro:
main.c: In function 'lePrato':
main.c:39: warning: format '%s' expects type 'char ', but argument 2 has type 'char ()[20]'
main.c:39: warning: format '%s' expects type 'char ', but argument 2 has type 'char ()[20]'
main.c:43: warning: format '%lf' expects type 'double ', but argument 2 has type 'float '
main.c:43: warning: format '%lf' expects type 'double ', but argument 2 has type 'float '
main.c: In function 'ordemA':
main.c:82: warning: assignment makes integer from pointer without a cast
main.c:84: warning: passing argument 2 of 'strcmp' makes pointer from integer without a cast
main.c:86: error: incompatible types in assignment
main.c:89: error: incompatible types in assignment
A minha principal dúvida está com a função ordemA, pois, ao meu ver (de que começou a programar esses dias) tá tudo ok. Me ajudem?
Grata
Discussão (7)
Carregando comentários...