Ir ao conteúdo
  • Cadastre-se

Maicon Prais

Membro Júnior
  • Posts

    2
  • Cadastrado em

  • Última visita

Reputação

0
  1. obrigado, vou modificar aqui. adicionado 1 minuto depois @TYSQUARE89 obrigado, vou modificar aqui. adicionado 29 minutos depois @TYSQUARE89 Oi, pode me ajudar de novo como eu sou novo na programação eu não estou conseguindo fazer a parte 3 e 4 que você me passou pode me ajudar com o código ? e na chamada da erro com a declaração "buscar_vinho(p, X)" eu tenho que declarar na main o p e o x ?
  2. Alguém poderia me ajudar neste programa de cadastro de vinhos. eu não estou conseguindo fazer o cadastro e nem a opção de buscar os vinhos com o código. ele cadastra mais não está imprimindo os vinhos cadastrados. o programa tem que ter ênfase em ponteiros e alocação dinâmica da memória. o programa está copilando sem erro. #include <stdio.h> #include <stdlib.h> #include <string.h> struct VINHO { char nome[30]; char vinicola[30]; int ano; char pais[20]; int codigo; float preco; struct VINHO *proximo; int opcao; }; struct VINHO *lista= NULL; FILE * pfile; void cadastrar_vinho(){ char nome[30]; char vinicola[30]; int ano; char pais[30]; int codigo; float preco; struct VINHO *ptr; ptr = (struct VINHO* )malloc(sizeof(struct VINHO)); strcpy(ptr->nome, nome); strcpy(ptr->vinicola, vinicola); ptr->ano = ano; strcpy(ptr->pais, pais); ptr->codigo = codigo; ptr->preco = preco; ptr->proximo = NULL; pfile = fopen("BD_vinhos.txt", "a"); // abre o arquivo depois de colocar o conteudo dentro do ponteiro do struct if (pfile != NULL) { fprintf(pfile,"\n%s;%s;%d;%s;%d;%.2f", nome, vinicola, ano, pais, codigo, preco); //joga no arquivo if (lista == NULL) //se a lista estiver vazia lista = ptr; else { ptr->proximo = lista; // o proximo recebe a cabeca da lista lista = ptr; // a lista vira o ponteiro } fclose(pfile); // fecha arquivo } else printf("Erro ao abrir o arquivo\n"); system("clear"); printf("Digite o nome do vinho: \n"); scanf("%s", nome); printf("Digite o nome da Vinicola: \n"); scanf("\n%s", vinicola); printf("Digite o ano de producao do vinho: \n"); scanf("\n%d", &ano); printf("Digite o pais de origem do vinho: \n"); scanf("\n%s", pais); printf("Digite o codigo do vinho: \n"); scanf("\n%d", &codigo); printf("Digite o preco do vinho: \n"); scanf("\n%f", &preco); } void remover_vinho(int codigo) { struct VINHO *anterior, *ptr, *p,*el = NULL, *aux; int achou = 0; anterior = lista; if (codigo == lista->codigo) { el = lista; lista = lista->proximo; free(el); printf("Vinho removido!\n"); } else { anterior = lista; ptr = lista->proximo; while (ptr != NULL && ptr->codigo != codigo) { anterior = ptr; ptr = ptr->proximo; } if (ptr != NULL) { el = ptr; anterior->proximo = ptr->proximo; free(el); printf("Vinho removido!\n"); } else printf("Codigo invalido, vinho nao encontrado\n"); } } void buscar_vinho(int codigo ){ struct VINHO *busc, *salv; printf("Digite o codigo do vinho: "); scanf("%d",&codigo); busc = lista; while (busc != NULL) { if (codigo == busc->codigo) { salv = busc; busc = busc->proximo; } else busc = busc->proximo; } if (busc == NULL) printf("Vinho nao encontrado\n"); else printf("Nome: %s\n",busc->nome); printf("Vinicola: %s\n",busc->nome); printf("Ano: %d\n",busc->ano); printf("Pais: %s\n",busc->pais); printf("Codigo: %d\n", busc->codigo); printf("Preco: %.2f\n", busc->preco); } void ordenar_vinho(){ int opcao; do{ system("clear"); printf("\t===================================\n"); printf("\t\t Opções de ordenação:\n"); printf("\t===================================\n"); printf("\t 0 - Ordenar por ano.\n\t 1 - Ordenar por preço.\n\t 2 - Ordenar por país de origem. \n\t 3 - Ordenar por código identificador.\n\t 4 - Ordenar por nome e vinicola.\n\t s - Sair.\n"); printf("\t===================================\n"); printf("\tEscolha uma opcao: "); scanf("%d", &opcao); switch(opcao){ case 0: //ordenarano(); printf("Ordenação por ano feita!"); break; case 1: //ordenarpreco(); printf("Ordenação por preço feita!"); break; case 2: //ordenarpais(); break; case 3: //ordenarcodigo(); printf("Ordenação por codigo feita!"); break; case 4: //ordenarnomvin(); break; case 's': system("clear"); printf("\t\tFim da ordenação\n"); break; default : system("clear"); printf("OPCAO INVALIDA:\n"); } }while(opcao != 's'); } void imprimir_vinho(){ char nome[30], vinicola[30], pais[30]; int codigo, ano; float preco; struct VINHO *p; p = lista; while (p != NULL) { printf("Nome: %s \n", p->nome); printf("Vinicola: %s \n",p->vinicola); printf("Ano de fabricação: %d \n ",p->ano); printf("Pais de origem: %s \n ",p->pais); printf("Codigo: %d \n",p->codigo); printf("tPreco: %.2f\n", p->preco); printf("=======================================\n"); p = p->proximo; } } int main (){ { lista=0; char opcao, nome[30], vinicola[30], pais[30]; int ano, codigo; float preco; struct VINHO *p; do{ //system("clear"); printf("\t===================================\n"); printf("\t\tLISTA DE CADASTRO:\n"); printf("\t===================================\n"); printf("\t c - Cadastrar vinho.\n\t r - Remover vinho.\n\t b - Buscar vinho. \n\t o - Ordenar lista de vinhos. \n\t i - Imprimir lista de vinhos.\n\t s - Sair.\n"); printf("\t===================================\n"); printf("\tEscolha uma opcao: "); scanf("%s", &opcao); switch(opcao){ case 'c': cadastrar_vinho(); break; case 'r': printf("Digite o codigo do vinho: "); scanf(" %d", &codigo); remover_vinho(codigo); break; case 'b' : buscar_vinho(codigo); break; case 'o' : ordenar_vinho(); break; case 'i' : system("clear"); imprimir_vinho(); break; case 's' : system("clear"); printf("\t\tObrigado pela sua visita!\n"); break; default : system("clear"); printf("OPCAO INVALIDA:\n"); } }while(opcao != 's'); return 0; } }

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