Ir para conteúdo
Fórum Script Brasil
  • 0

Erro em Execução C


Ozie

Pergunta

Bom dia galera, eu tava fazendo esse código aqui, e no meio do cadastro, OPÇÃO 1, quando seto o último valor no caso, depois de ler 

o programa para sua execução.. Não consegui identificar o problema, vou postar o código aqui, alguém saberia dizer o problema ?

#include <stdio.h>
#include<stdlib.h>
#include <string.h>
#include <locale.h>
#include <string.h>
#define MAX 2
#define String 50

// APÓS O CADASTRO DO PRODUTO IMPRIMIR O ID NA TELA PARA O USUÁRIO PODER BUSCAR POSTERIORMENTE.
 typedef struct {
	char mes[50]; // Empilhar o Mês, Ex: Validade - Fabricação e Quando expira.
	char nome[50];
	float valorP;
	char categoria; // (A = Comida, B = Utensílios, C = Bebida)
	int topo;
	
} p_produto;

 typedef struct { //fila
	int id;
	int primeiro, ultimo;
	p_produto produto;
	
} registro[MAX];

void iniciapilha(registro *p, int posicao){
	(*p)[posicao].produto.topo = -1;
}

int vazia(p_produto *p){
	if (p->topo == -1)
		return (1);
	else
		return (0);
}


int insere(char elemento[String], registro *p, int posicao){ // String que guarda mes, Fila da Pilha, e a posição.
	if((*p)[posicao].produto.topo == MAX - 1){
		printf(" (!) ERRO: ", "CADASTRO CHEIO!");
		return(0);
		
	}

	strcpy((*p)[posicao].produto.mes[++((*p)[posicao].produto.topo)], elemento);
	return (1);
}

int iniciaFila(registro *f){
	(*f)->primeiro = MAX - 1;
	(*f)->ultimo = MAX - 1;
}

int addFila(int id, registro *fila){ //
	if((*fila)->ultimo == MAX -1){
		(*fila)->ultimo = 0; // Que é igual a I == 0
	}
	else
		((*fila)->ultimo)++;
	
	if((*fila)->ultimo == (*fila)->primeiro){
		printf("ERRO: %s\n", "Estouro na Fila!");
		exit(1);
	}
	
	(*fila)[(*fila)->ultimo].id = id;
	return 1;
}

int buscaFila(int id_param, registro *fila){
	int i;
	
				
	for(i=0; i<MAX; i++){
		if((*fila)[i].id == id_param){			
			printf("\nPRODUTO: %s", (*fila)[i].produto.nome);
			printf("\nPREÇO: %.2f", (*fila)[i].produto.valorP);
			printf("\nCATEGORIA: %c", (*fila)[i].produto.categoria);
			printf("\nVALIDADE: %s", (*fila)[i].produto.mes);
			return 1;
		}
	}
	
	return 0;
}

  
 int menu(){
	int i = 0, resp, idaux = 0, successInsert;
	char lerString[50];
	registro reg;
	reg[0].id = 0;
	int id_consulta;

	printf("\n\t\tSISTEMA PARA CADASTRO DE 100 PRODUTOS\t\t\n");
		
	do{
		printf("\nOPCAO 1 - CADASTRAR PRODUTO \nOPÇÃO 2 - LISTAR ID'S \nOPÇÃO 3 - BUSCAR PRODUTO \nOPÇÃO 4 - SAIR");
		printf("\n\nINFORME OPCAO DESEJADA : \n");
		scanf("%d",&resp);
		system("cls");
		switch(resp)
		{
		case 1:
			iniciaFila(&reg);
			iniciapilha(&reg->produto, i); //Pega o topo da pilha pela posição do vetor da fila.
			printf("\nInserindo Informações :\n");
			
			printf("\nNOME DO PRODUTO :\n");
			scanf("%s",reg[i].produto.nome);
			
			fflush(stdin);
			
			printf("\nPREÇO (R$) :\n");
			scanf("%f",&reg[i].produto.valorP);
			
			fflush(stdin);
			
			printf("\nCATEGORIA (A = Comida, B = Utensílios, C = Bebida):\n");
			scanf("%c",&reg[i].produto.categoria);
			
			fflush(stdin);
			
			printf("\n Validade (Ex: 01/08/2018):\n");
			scanf("%s",lerString); //Setar esse valor chamando a função Insere() na Pilha.
			
			fflush(stdin);			
			successInsert = insere(lerString, &reg->produto, i);
			
			if(successInsert){
				
				idaux++; //setar uma função da Fila pra rodar essa rotina.
					addFila(idaux, &reg);
					printf("\nID DO PRODUTO CADASTRADO : %d", idaux); // *OBS: mudar o íncide de forma parametrizada
					i++;
					printf("Pressione qualquer tecla para voltar ao Menu...");
					getch();
					system("cls");
					break;
				
			}
			else{
				strcpy(reg[i].produto.nome, "");
				reg[i].produto.valorP = 0.0;
				reg[i].produto.categoria = "";
				printf("\nInserção com excesso de espaço!\n");
				printf("Voltando para Menu.\n");
				getch();
				break;
			}	
		
		case 2:
			
			printf("\tID  |  PRODUTO\n");
			
			for(i=0;i<MAX;i++){
				printf("%d", reg[i].id);
				printf("  |  ");
				printf("%s", reg[i].produto.nome);
				printf("\n");
			}
			printf("\n\n");
			printf("Pressione qualquer tecla para voltar ao Menu...");
			getch();
			system("cls");
			break;
		
		case 3:	
			
			printf("\nBUSCANDO DADOS . . . . . . .\n");
			
			printf("\n\nINFORME O ID DO PRODUTO :\n");
			scanf("%d", &id_consulta);
			
			if(buscaFila(id_consulta, &reg)){ //setar função p fazer essa busca na fila. Em que trata se existe ou não ID.
				buscaFila(id_consulta, &reg);
			}
			
			printf("\n\nMES não CONSTA NO REGISTRO !\n");
			printf("Aperte qualquer tecla para voltar pro Menu...");
			getch();		
			system("cls");
			break;
			
		case 4:
			printf("\t\t**** Programa Encerrado! Volte sempre. ****");
			printf("\n\n");
			break;
			
		default:
			printf("Opcao Invalida. Tente novamente");
			return menu();
				
		}
	}while(resp != 4);
	
 }
 

 
 int main(){
	setlocale(LC_ALL, "Portuguese");
	 menu();
	 return 0;
 }

 

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...