Ir ao conteúdo

Posts recomendados

Postado

Galera tenho o seguinte problema, estou fazendo um programa baseado em um menu, cada opção do menu é realizada através de uma função. No entanto estou com problemas nas funções

consultar_peca_nome e vender_peca, ambas não exibem os prints que contém dentro do laço for.

 

#include <stdio.h>

// sistema para controlar estoque
// struct  nome(30 caracteres), marca(30 caracteres), preço (real), quantidade em estoque(inteiro), estoque mínimo (inteiro)
// Utilize um vetor para armazenar as informações sobre as peças (máximo de 100 peças)
// O cadastro de peças deve ser feito uma a uma, ou seja, a cada inclusão deve ser perguntado se deseja incluir outra

struct ficha 
{
	char nome[30];
	char marca[30];
	float preco;
	int quantidade_estoque;
	int estoque_minimo;
};

// inclui peca
int incluir_peca (struct ficha pecas[100], int i)
{
	char resp;
	
	do 
	{
		printf ("\n Nome: ");
		fflush (stdin);
		gets (pecas[i].nome);
		
		printf ("\n Marca: ");
		gets (pecas[i].marca);
		
		printf ("\n Preco: ");
		scanf ("%f", &pecas[i].preco);
		
		printf ("\n Quantidade em Estoque: ");
		fflush (stdin);
		scanf ("%d", &pecas[i].quantidade_estoque);
		
		printf ("\n Estoque minimo: ");
		scanf ("%d", &pecas[i].estoque_minimo);
		
		i ++;
		
		printf ("\n Deseja incluir novo cliente? (S/N)");
		fflush (stdin);
		scanf ("%c", &resp);
		
	} while ((resp == 'S') || (resp == 's'));
	return i;
}

// consulta peça por nome
void consultar_peca_nome (struct ficha pecas[100], int q_pecas, char nome_peca[30])
{
	int i;
	
	for (i=0; i<q_pecas; i++)
	{
		if (pecas[i].nome == nome_peca)
		{
			printf (" Nome: %s \n ", pecas[i].nome);
			printf (" Marca: %s \n", pecas[i].marca);
			printf (" Preco: %.2f \n", pecas[i].preco);
			printf (" Quantidade em estoque: %d \n", pecas[i].quantidade_estoque);
			printf (" Quantidade minima: %d \n", pecas[i].estoque_minimo);
		}
	}
}

// exibe peças abaixo do estoque minimo
void exibir_peca_estoque_baixo (struct ficha pecas[100], int q_pecas)
{
	int i;
	
	for (i=0; i<q_pecas; i++)
	{
		if (pecas[i].estoque_minimo  pecas[i].quantidade_estoque)
		{
			printf (" Nome: %s \n ", pecas[i].nome);
			printf (" Quantidade em estoque: %d \n", pecas[i].quantidade_estoque);
			printf (" Quantidade minima: %d \n", pecas[i].estoque_minimo);
		}
	}
}

void vender_peca (struct ficha pecas[100], int q_pecas)
{
	int i;
	char nome_peca[30];
	int vendido;
	
	printf ("\n Digite o Nome da Peca: ");
	fflush(stdin);
	gets (nome_peca);
	
	printf ("\n Quantidade que deseja comprar: ");
	scanf ("%d", &vendido);
	
	for (i=0; i<q_pecas; i++)
	{
		if (pecas[i].nome == nome_peca)
		{
			pecas[i].quantidade_estoque = pecas[i].quantidade_estoque - vendido;
			
			if (pecas[i].quantidade_estoque < pecas[i].estoque_minimo)
			{
				printf ("\n A peça %s ficou com estoque %d - ABAIXO DO MÍNIMO", pecas[i].nome, pecas[i].quantidade_estoque);
			}
		}
	}
	
}

int main ()
{
	struct ficha pecas[100];
	int op, valor = 0; 
	
	do
	{
	printf ("\n Escolha uma opcao");
		
	printf ("\n 1- Incluir Peca");
	printf ("\n 2- Consultar Peca por Nome");
	printf ("\n 3- Exibir Pecas com estoque baixo");
	printf ("\n 4- Vender Peca");
	printf ("\n 5- Sair \n \n");
		
	scanf ("%d", &op);
		
		switch (op)
		{
			char nome[30];
			
			case 1:
				valor = incluir_peca (pecas, valor);
			break;
			
			case 2:
				printf ("\n Digite um nome: ");
				fflush (stdin);
				gets (nome);
				consultar_peca_nome (pecas, valor, nome);
			break;	
			
			case 3:
				exibir_peca_estoque_baixo (pecas, valor);
			break;
			
			case 4:
				vender_peca (pecas, valor);
			break;
		}      
	} while ((valor < 100) && (op != 5));
	
}

 

  • Solução
Postado

O problema está no condicional. Na linguagem c, não existe o tipo primitivo string e nos condicionais dentro das funções citadas, tu estás comparando ponteiros quando faz:

if (pecas[i].nome == nome_peca)

Para comparar strings, utilize a função strcmp. exemplo abaixo:

 

if (strcmp(pecas[i].nome, nome_peca) == 0)

Obs: precisa incluir a biblioteca string.h no início.

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