Ir ao conteúdo
  • Cadastre-se

C Função não exibe printf dentro do laço for


Ir à solução Resolvido por djm_jm,

Posts recomendados

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));
	
}

 

Link para o comentário
Compartilhar em outros sites

  • Solução

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
Link para o comentário
Compartilhar em outros sites

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