Ir ao conteúdo
  • Cadastre-se
Annyrs

Verificar se um valor esta contido no vetor, logo apos o usuario digitar.

Recommended Posts

#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

Editado por Annyrs
Acrescentar conteudo

Compartilhar este post


Link para o post
Compartilhar em outros sites

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. 

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites
4 horas atrás, Annyrs disse:

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

Le isso aqui e nunca mais você terá esse problema. As respostas dos usuários também porque aportam muito. http://forum.imasters.com.br/topic/336835-tutorial-systempause-e-fflushstdin/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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

×