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(®);
iniciapilha(®->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",®[i].produto.valorP);
fflush(stdin);
printf("\nCATEGORIA (A = Comida, B = Utensílios, C = Bebida):\n");
scanf("%c",®[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, ®->produto, i);
if(successInsert){
idaux++; //setar uma função da Fila pra rodar essa rotina.
addFila(idaux, ®);
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, ®)){ //setar função p fazer essa busca na fila. Em que trata se existe ou não ID.
buscaFila(id_consulta, ®);
}
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;
}