Ir ao conteúdo

Posts recomendados

Postado
#include<stdio.h>
#include<stdlib.h>

struct remedios
{
	int codigo, quantidade;
	char nome[50];
	float valor;
	struct remedios *ant;
	struct remedios *prox;
};

int escolha;

main()
{
	remedios*inicio = (remedios*)malloc(sizeof(remedios));
	if(!inicio)
	{
		printf("Erro");
		exit(1);
	}
	
	inicio->codigo = NULL;
	inicio->nome[0] = NULL;
	inicio->quantidade= NULL;
	inicio->valor = NULL;
	inicio->prox = NULL;
	
	do
	{
		printf("1 - Carregar despesas de remedios" );
		printf("\n");
		printf("2 - Imprimir lista das despesas de remedios");
		printf("\n");
		printf("3 - Sair");
		printf("\nFunção: ");
		scanf("%i", &escolha);
		printf("\n");
		
		switch(escolha)
		{
			case 1:
				{
					remedios*novo = (remedios*)malloc(sizeof(remedios));
					if (!novo)
				    {
					    printf("Erro");
					    exit(1);
				    }
				    novo->codigo = NULL;
				    novo->nome[0] = NULL;
				    novo->quantidade = NULL;
				    novo->valor = NULL;
	                novo->prox = NULL;
					
					printf("Codigo: ");
					scanf("%i", &novo->codigo);
					
					printf("Nome do remedio: ");
					fflush(stdin);
					gets(novo->nome);
					 
					printf("quantidade: ");
					scanf("%i", &novo->quantidade);
					
					printf("valor: ");
					scanf("%f", &novo->valor);
					
					if (inicio->prox == NULL)
				    {
					    inicio->prox = novo; 
				    }
				    
				    else
				    {
					    remedios *temp;
					    temp = inicio;
					
					    while (temp->prox != NULL)
					    {
						    temp = temp->prox;
					    }
					    temp->prox = novo;
					}  
			    }
			    break;
			case 2: 
			    {
				    remedios *temp;
				    temp = inicio;
				    
				    if(inicio->prox == NULL)
				    {
				        printf("Nenhum remedio encontrado\n\n");
				        system("pause");
				        break;
				    }
				    
				    else
				    {	
				        do 
				        {
				        	temp = temp->prox;
				        	printf("Codigo: %2i\n", temp->codigo);
							printf("Nome do remedio: %2s\n", temp->nome);
				        	printf("Quantidade: %2i\n", temp->quantidade);
					        printf("valor: %2f\n", temp->valor);
					        printf("\n");
				        }while (temp->prox != NULL);
				    }
			    }
			    printf("\n");
			    system("pause");
			    break;
			case 3: 
			    {
				    printf("Fim do programa\n\n");
			    }
			    system("pause");
			    break;
		}
		system("cls");
	}while(escolha != 3);
}

Ola estou tentando limitar essa struct do comeco para 50 mais ela nao esta indo se alguem poder me ajudar como fazer isso agradeco. Obrigado

  • Obrigado 1
Postado
4 minutos atrás, luckyiers disse:

Ola estou tentando limitar essa struct do comeco para 50 mais ela nao esta indo

 

O que significa?

 

O que quer limitar? Algo como um vetor com 50 remedios?

  • Curtir 1
Postado

Parece que quer usar uma lista ligada. Então você deve aplicar esse limite na lista ligada e não na estrutura que descreve os remédios. Pense nisso.

 

Isso faria sentido no caso de querer usar um vetor de até 50 remédios. E entenda que sua struct só tem um remédio.
Fosse esse o caso faria mais sentido escrever em torno dos dados e escrever algo assim
 


typedef struct
{
	int   codigo;
	int   quantidade;
	char  nome[50];
	float valor;

}    Remedio;

typedef struct
{
	int     cap;
	int     tam;
	Remedio R[50];

}   Remedios;

 

Aí um remédio está ok. E o estoque ficou mais simples. Pode escrever
 

	Remedios    droga2;
	droga2.cap = 50;
	droga2.tam = 0;

 

E tem claro que droga2 tem capacidade para 50 remédios e está vazia, antes de começar a escrever o programa...

 

E se fosse uma lista ligada?

 

Nunca por nada misture os dados com a estrutura. Só vai dar problema. Se mudar os dados vai mudar a estrutura e se mudar a estrutura vai mudar os dados. E nada tem a ver uma coisa com a outra. Uma lista é uma lista. Um remédio é um remédio. 
 

Seu próximo trabalho pode ser aquele outro chato exercício de lista. Mas de livros. Ou pior, implementar uma pilha. Mas de remédios, com a mesma struct. Se programou tudo misturado vai ter que programar tudo de novo. Não é pra isso que se escrevem programas e estruturas de dados.

 

Sua lista seria de Remedio então. Cada elemento da lista, chamado nó, teria um único remédio, algo assim
 

typedef struct no
{
	struct no* ant; // proximo remedio
	struct no* prox; // remedio anterior

	Remedio*   dado;

}   Node;

 

E poderia programar sua lista a partir daí, mas com o cuidado de manter um controle de não passar de 50 nós. E funciona. Mas é bobagem. Uma lista não é um nó, assim como uma coleção de remédios não é um vetor. Porque? No caso dos remédios já te mostrei: Não adianta ter o vetor com 50 struct Remedio sem marcar em algum lugar o tamanho do vetor (50) e quantos tem agora. Precisa desses valores. Veja as struct acima e vai entender. Isso se chama, no conjunto, metadados. E se deixar isso solto no programa dá muito mais trabalho. Isso se tiver um vetor só de remédios...

 

Na lista é a mesma coisa. O nó sozinho é pouco. Veja um exemplo:
 

typedef struct
{
	int    cap;
	int    tam;
	Node*  inicio;
	Node*  fim;

}   Lista;

 

Assim a conta fecha mais fácil: uma Lista tem Nodes. Lista tem uma capacidade e um tamanho atual. Tem um ponteiro para o início e um para o fim. Dentro de cada Node tem um Remedio. Cada remédio tem um nome, um preço e tal.

 

Muitas coisas já estão amarradas, antes de escrever uma única linha de programa.

 

Acho que com tantos exemplos já entendeu que typedef serve para criar um tipo, um alias, um outro nome para a estrutura. Facilita muito porque depois você pode alterar o que tem dentro sem mudar o nome. Afinal o próximo exercício pode ter outro tipo de lista. Que é uma Lista. Igualzinho.

 

Criar uma Lista pode ser simples como
 

	Lista   farma1;
	farma1.cap = 50;
	farma1.tam = 0;
	farma1.inicio = NULL;
	farma1.fim = NULL;

 

Antes de começar a programar...

 

Copiei isso de algo que escrevi para um pessoal aqui e adaptei os seus dados. Espero que faça sentido para você.

 

 

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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