Ir ao conteúdo

Posts recomendados

Postado
#include <stdio.h>
#include <string.h>
 
 int main(){

	 int op, achou, codigo, i;
	 char op_sub;
 
 struct{
    int codigo;
    char nome[30];
    int quantidade;
    float preco;
} produto[3];

   for (i=0; i<3; i++){   // eu vi algo parecido com isso então tentei aplicar aqui
	produto[i].codigo= 0;
    }
  
   op=1;
   
   if(op==1)
  
  do {
        
        printf("Digite o nome do produto:  ");
		scanf("%s",produto[i].nome);
		getchar();
		
		do{ 
		printf("Digite o codigo do produto: ( 0 ao 100 )  ");
		scanf("%d",&codigo);
			achou=0;
			for (i=0;i< 3;i++){
				if( codigo == (produto[i].codigo)){
					 achou =1;
					 
					 printf("\nJa existe cliente cadastrado com este codigo");
				}
			}				 
		}while(achou==1);
	do{
		printf("Digite o preco sugerido:  ");
		scanf("%f", &produto[i].preco);
		
			if(produto[i].preco<=0)
			puts("Valor invalido");
		}while(produto[i].preco<0);
		
		do{
		printf("Digite a quantidade contida no estoque:  ");
		scanf("%d", &produto[i].quantidade);
			if(produto[i].quantidade<=0)
			puts("Valor invalido");
		}while(produto[i].quantidade<0);

		printf("\n\nDeseja cadastrar outro produto sim(S) ou não(N)?  ");
		getchar();
				
		scanf("%c", &op_sub);
		getchar();
		} while (op_sub == 's' || op_sub == 'S');
	
  
  return 0;
}

 

adicionado 4 minutos depois

O programa tem q verificar se o codigo do produto ja foi cadastrado.
Eu fiz alguns ajustes e so postei a parti q envolve a minha pergunta.
Ate então consegui isso, mais não funcionou, outra coisa q tentei fazer foi q ao ser atingido o valor maximo do vetor, exibisse uma mensagem de memoria cheia, tentei usar um if atrelado a uma variavel contadora, mais nao funcionou... Agradeço quem puder me ajudar

Postado

Encontrei alguns erros no seu código e fui comentando e arrumando:

 

#include <stdio.h>
#include <string.h>
#include <locale.h>
#define MAX 100 /*Uma constante para não ter que ficar alterando cada valor toda vez que for mudar tudo*/

 int main(){

	 int op, achou, codigo, i,tam=0 /*Contador para saber o numero de prod. cadastrado*/;
	 char op_sub;
	 setlocale(LC_ALL,""); //Usado para poder colocar acentos
 
 struct{
    int codigo;
    char nome[30];
    int quantidade;
    float preco;
} produto[MAX];
  
  	do
	{
        printf("Digite o nome do produto:  ");
		scanf("%s",produto[tam].nome);
		getchar();	
		
		do{ 
			printf("Digite o codigo do produto: ( 0 ao 100 )  ");
			scanf("%d",&codigo);
			achou=0;
			
			for (i=0;i<=tam;i++)
			{
				if( codigo == (produto[i].codigo))
				{
					achou=1;
					printf("\nJa existe cliente cadastrado com este codigo\n");
				}
			}
			
		}while(achou==1);
		
		produto[tam].codigo=codigo; //Se ele saiu do while é porque não há codigo cadastrado então você tem que jogar o codigo no vetor
		tam++; //Se saiu do while então acrescenta 1 no tamanho para o proximo looping
		
		do{
			printf("Digite o preco sugerido:  ");
			scanf("%f",&produto[tam].preco);
			
			if(produto[tam].preco<=0)
				puts("Valor invalido");
			
		}while(produto[tam].preco<0);
		
		
		do{
			printf("Digite6 a quantidade contida no estoque:  ");
 			scanf("%d",&produto[tam].quantidade);
			
			if(produto[tam].quantidade<=0)
				puts("Valor invalido");
		}while(produto[tam].quantidade<0);

		printf("\n\nDeseja cadastrar outro produto sim(S) ou não(N)?  ");
		fflush(stdin);	
		scanf("%c",&op_sub);
		//Tinha uns getchar aqui que não são necessarios
		
	} while ((op_sub == 's' || op_sub == 'S') && tam!=MAX/*Verifica se ja esta completa a lista de produtos*/);
	
  
  return 0;
}

Por exemplo você não tinha um controle de tamanho do vetor então como você ia adicionar um novo produto no fim do vetor? Use o próprio tamanho dele pois no fim de cada looping ele vai ter um novo espaço vazio para o próximo cadastro. E adicionei outras coisas como o locale para acentuar e a constante MAX para nao ficar editando o tamanho maximo em tudo todas as vezes. 

Postado

Muito obrigada, avancei um degrau falta so mais alguns sub menus para terminar... nao  sei se é coisa do meu #linux, mais so repeti o laço quando uso o getchar, depois do printf e depois do scanf... 

Visitante
Este tópico está impedido de receber novas respostas.

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!