Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá, tenho dois problemas que são o seguinte: 1 - Quando escolho a opção "1" e entro no cadastro de produtos o programa pula a etapa de cadastro do "nome", isto é , me deixando cadastrar somente o "codigo" e "estoque minimo". Me disseram que o FFLUSH resolveria esse problema, esse é realmente o método correto? 2 - Quando vou na opção "2 - listar" ele não exibe os valores que foram cadastrado, isto é , a tabela é impressa corretamente só que os valores não são correspondentes.
#include<stdio.h>
#include<strings.h>
#include<string.h>
#define max = 10;
int contador=0 ;
//ESTRUTURA DOS DADOS
struct produtos{
int codigo;
char nome[30];
float precoMedioUnitario;
int quantEstoque;
int estoqueMinimo;
};
struct produtos cadProduto[9];
main(){
menu();
}
// PROCEDIMENTO - VOID MENU
void menu(){
// VARIAVEL PARA ESCOLHA SWITCH
int escolha;
// MENU
printf("1 - Cadastrar um produto");
printf("\n2 - Listar os produtos cadastrados");
printf("\n3 - Consultar os dados de um produto ");
printf("\n4 - Processar uma saida de mercadoria do estoque");
printf("\n5 - Processar uma entrada de mercadoria no estoque");
printf("\n6 - Sair do programa");
//ESCOLHA DE OPERACAO
printf("\nOperacao: ");
scanf("%d", &escolha);
//DESVIO PARA A OPCAO
switch(escolha){
case 1:
cadastro();
break;
case 2:
listar();
break;
case 3:
break;
case 4:
break;
case 5:
break;
case 6:
break;
default:
printf("Valor Invalido");
}
}
// FUNCAO CADASTRO DE PRODUTOS
void cadastro(){
int resultado;
do{
//FORMULARIO DE CADASTRO
printf("Codigo do produto: ");
scanf("%d", &cadProduto[contador].codigo);
printf("\n");
printf("Nome do produto: ");
fgets(cadProduto[contador].nome, 30, stdin);
printf("\n");
printf("Estoque minimo: ");
scanf("%d", &cadProduto[contador].estoqueMinimo);
printf("\n");
contador++;
printf("Deseja cadastrar mais produtos? Precione 1 - Sim ou 2 - Nao:\n");
scanf("%d", &resultado);
while(resultado!=1 && resultado!=2){
printf("\n");
printf("Opcao invalida!");
printf("\n");
printf("Deseja cadastrar mais produtos? Precione 1 - Sim ou 2 - Nao:\n");
scanf("%d", &resultado);
}
} while(resultado!=2);
printf("\nOperacao Concluida com sucesso!\n");
printf("\n");
menu();
}
void listar(){
printf("\n");
for(int i=0; i<contador;i++){
printf("%d | %c | %d | %f | %d\n ",cadProduto[contador].codigo,
cadProduto[contador].nome, cadProduto[contador].quantEstoque,
cadProduto[contador].precoMedioUnitario, cadProduto[contador].estoqueMinimo
);
}
}Wooow. Você me ajudou muito!!
Agradeço de verdade.
Não. Não se faz flush na entrada padrão.
Os problemas com seu código:
1- Seu define está errado
2- Função main sem retorno
3- Teoricamente a função menu faz mais do que deveria (além de apresentar a opção, ela lê e se preocupa com a lógica de dispatch das chamadas às demais funções)
4- Cada vez que você chama uma função, a pilha de chamadas cresce. Então, imaginando que esse programa pudesse estar usando alocação dinâmica ao invés de estática, e esse menu seria chamado indefinidamente dentro do menu de cadastro, uma hora daria stack overflow ou algum erro dizendo que você tentou escrever em espaço proibido em memória.
5- A indexação está errada na listagem.
6- O formato no printf p/ o nome está errado (o nome é uma string, não um caractere)
Não existe a palavra "precionar" em português. Escreve-se "pressionar".
#include <stdio.h>
#include <string.h>
#define SIM 1
#define NAO 2
#define MAXPRODUTOS 10
#define CADASTRO 1
#define LISTAGEM 2
#define SAIR 6
struct produto{
int main(void){
void menuPrincipal(){
void leituraCadastro(){
int confirmacaoContinuarCadastro() {
void listarProdutos(){