Ir ao conteúdo

Posts recomendados

Postado

https://replit.com/@DaviKasmirski/Me-Ajude?v=1

 

//Foram incluídas as bibliotecas
#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#include <time.h>
//Começamos a fazer o programa com Struct.

//Struct 1: Cadastro da Pessoa.
struct {
  char nome[30];
  char nome1[30];
  char senha[20];
  char senha1[20];
  int idade;
  char horas;
  char minutos;
} cadastro_pessoa;

//Struct 2: Cadastro de Produtos
struct {
  int codigo;
  char nome_produto[30];
  char data[10];
  float preco;
  int quantidade_produtos;
  int estoque_maximo;
  int estoque_minimo;
} cadastro_produtos;

//Struct 3: A entrada, a saída dos produtos
struct {
  int quantidade_retirada;
  int quantidade_reposta;
  char data[10];
  int valor_final;
} saida_entrada_produtos;

//Colocmos simples printf's para deixar o programa mais bonirto e adicionamos no programa a Linguagem Portuguesa, acrescentamos caracteres epeciais, tipo "," e até CÓDIOGS ALT(Ex: "█")
int main(void) {
  setlocale(LC_ALL, "Portuguese");
  printf("\nINICIANDO O PROGRAMA! ");
  printf("\n\nAGUARDE...");
  printf("\n\nPROGRAMA INICIADO COM SUCESSO!!");
  //Primeira parte do Programa: O Cadastro
  char cadrasto;

  //Opção se possuí ou não Cadastro
  printf(
      "\n\njá possui um cadastro?\nS para SIM\nN para NÃO\n\nsua resposta?: ");
  scanf("%s", &cadrasto);
//Informar o nome
  if (cadrasto == 'N') {
    printf("\n-----cadastro-----");
    printf("\n\ninforme o seu nome: ");
    scanf("%s", cadastro_pessoa.nome);
//Informar a idade (com a função de não aceitar menores de 18 anos, ex: digitei 12, dá cadastro negado e imediatamente o programa fecha)
    printf("informe sua idade: ");
//Usamos o fflush para ignorar o botão "enter"    
    fflush(stdin);
    scanf("%d", &cadastro_pessoa.idade);
    {
      if (cadastro_pessoa.idade < 18)
        {
          printf("o programa não aceita menor de idade");
          exit(0);
        }
    }
//Informar a senha
    printf("informe uma senha:");
    fflush(stdin);
    scanf("%s", cadastro_pessoa.senha);
  }
//Agora chega a parte do login: informar nome e senha= login efetuado
   if (cadrasto == 'S')
  {
  printf("\n\n----login----\n\n");
  // receber nome do usuario
  printf("informe seu nome: ");
  fflush(stdin);
  scanf("%s", cadastro_pessoa.nome1);

  // informar uma senha
  printf("informe sua senha: ");
  fflush(stdin);
  scanf("%s", cadastro_pessoa.senha1);

//comparar se o usuario pois os dados certos
int login_efetuado = 0;

//se a pessoa por os dados corretos
if (strcmp(cadastro_pessoa.nome1, cadastro_pessoa.nome) == 0 && strcmp(cadastro_pessoa.senha1, cadastro_pessoa.senha) == 0)
  {printf("\nlogin efetuado!!!\n");}

//se a pessoa por os dados incorretos
     else
      {
         printf("\n\nDADOS INVALIDOS!\n\n");
         exit(0);
      }

  }
//Nova declaração
  char novo_produto;
//Começamos a usar o while, para poder determinar um n° de vezes que o usuário e o produto forem cadastrados, até dar um loop infinto se você desejar.
  while (novo_produto != 'N') {
    
    // informações sobre o produtos
    printf("\n----informações do produto----");

    // informar nome dos produtos que serão usados
    printf("\n\ninforme o nome do produto: ");
    scanf("%s", cadastro_produtos.nome_produto);

    // informar codigo do produto
    printf("informe o código do produto: ");
    scanf("%d", &cadastro_produtos.codigo);

    // informar preço que o produtos custara
    printf("informar preço do produto em R$: ");
    scanf("%f", &cadastro_produtos.preco);

    // informar a quantidade de produtos
    printf("informe a quantidade de produtos: ");
    scanf("%d", &cadastro_produtos.quantidade_produtos);

    // informar o maximo que o produto pode ter no estoque
    printf("informe estoque maximo do produto: ");
    scanf("%d", &cadastro_produtos.estoque_maximo);

    // informar o minimo que esse produto pode chegar , criar alerta!
    printf("informe estoque minimo: ");
    scanf("%d", &cadastro_produtos.estoque_minimo);

    //caso o estoque maximo seja menor que o minimo ou menor que a quantidade já registrada de produtos
    if (cadastro_produtos.estoque_maximo < cadastro_produtos.estoque_minimo ||
        cadastro_produtos.estoque_maximo <
            cadastro_produtos.quantidade_produtos) {
      //Caso você tenha cometido algum erro o programa aponta a mensagem abaixo e encerra
      printf("\nERRO!! opções invalidas\nvocê informou errado o seu "
             "estoque :(");
      return 0;
    }

//Alertar se o usuário informou alguum dado incorreto
      if (cadastro_produtos.estoque_maximo < cadastro_produtos.estoque_minimo ||
        cadastro_produtos.estoque_maximo <
            cadastro_produtos.quantidade_produtos) {
      printf("\nERRO!! opções invalidas\nvocê informou errado o seu "
             "estoque :(");
      return 0;
    }

    //informar o horario que o produto chegou no estoque
    printf("informe a hora e minutos da chegada do produto no estoque:");
    scanf("%s:%s" , &cadastro_pessoa.horas , &cadastro_pessoa.minutos);

    if (cadastro_pessoa.horas < 24 ){
        printf("horario informado errado");
        return 0;
    }
    if (cadastro_pessoa.minutos < 60){
        printf ("Minutos informado errado");
      return 0;
    }
    
    // testar as opções do usuário(1 e 2)
    int opcao;
//Usuário 1:
    printf("\n-digite 1: para informar a quantidade retirada do estoque "
//Usuário 2:
           "\n\n-digite 2: para informar a quantidade reposta no "
           "estoque\n\nEscolha uma das opções: ");
    scanf("%d", &opcao);

    // caso usuario escolha opção 1 , iformara a quantidade retirada
    if (opcao == 1) {
      printf("\ninforme o código do produto: ");
      scanf("%d", &cadastro_produtos.codigo);
      
      printf("\ninforme a quantidade retirada do estoque: ");
      fflush(stdin);
      scanf("%d", &saida_entrada_produtos.quantidade_retirada);
    }
    
    // casa usuario escolha opção 2 , informarás a quantidade somada ao estoque
    if (opcao == 2) {
      printf("\n\ninforme o código do produto: ");
      scanf("%d", &cadastro_produtos.codigo);

      printf("\ninforme a quantidade reposta do estoque: ");
      fflush(stdin);
      scanf("%d", &saida_entrada_produtos.quantidade_reposta);
    }

    // opção invalida , mensagem de erro vai aparecer
    if (opcao != 1 && opcao != 2) {
      printf("\nopção invalida! ");
    }

    printf("\n\n---Resumo---");
    printf("\nhoras de chegada do produto:%s:%s", &cadastro_pessoa.horas , &cadastro_pessoa.minutos);
    // atribuir valor apos usuario ter escolhido opção

    //mostrar valor retirada do estoque
    if (opcao == 1) {
//Novo resultado! perante ao dados informados
      printf("\n\nNovo total do produto: %d %s",
             cadastro_produtos.quantidade_produtos -
            saida_entrada_produtos.quantidade_retirada,
             cadastro_produtos.nome_produto);
//Quantidade de produtos, de retirada e valor final.
      saida_entrada_produtos.valor_final =
          cadastro_produtos.quantidade_produtos -
          saida_entrada_produtos.quantidade_retirada;

      fflush(stdin);
//Estoque Médio
      printf("\nEstoque médio: %d %s",
             (cadastro_produtos.estoque_maximo +
              cadastro_produtos.estoque_minimo) /
                 2,
             cadastro_produtos.nome_produto);

      fflush(stdin);
    }

    // mostrar a quantidade reposta no estoque
    if (opcao == 2) {
      printf("\n\nQuantidade atualizada: %d",
             cadastro_produtos.quantidade_produtos +
                 saida_entrada_produtos.quantidade_reposta);

      fflush(stdin);

      saida_entrada_produtos.valor_final =
          cadastro_produtos.quantidade_produtos -
          saida_entrada_produtos.quantidade_retirada;

      fflush(stdin);

      printf("\nEstoque médio: %d", (cadastro_produtos.estoque_maximo +
                            cadastro_produtos.estoque_minimo) /
                                        2);

      fflush(stdin);
      }

//caso o usuario deseja registrar um novo produto
      
     printf("\n\nescreva S para SIM\nescreva N para NÃO\n\ndeseja registrar um "
           "novo produto?: ");
    fflush(stdin);
    scanf("%s", &novo_produto);
  }


//Revela os valores atuais
  printf("\n----Valores atuais----\n");

//Nome do produto
  printf("\nNome do produto: %s", cadastro_produtos.nome_produto);
  getchar();
//Código do prodto 
printf("\nCodigo do produto: %d", cadastro_produtos.codigo);
//Quantidade em estoque
  printf("\nQuantidade de produtos em estoque: %d",
         saida_entrada_produtos.valor_final);
// Continua...
}

  • Curtir 1
Postado

Use o botão code como explicado no primeiro post desse forum. É muito ruim de ler o código sem isso. E pior ainda para copiar se alguém puder te ajudar.

  • Curtir 1
Postado

@DaviKS    você está fazendo um controle de estoque ,   e nesse seu código já tem um while ,   porém você está colocando tudo junto , e seria melhor usar funções  e  switch no lugar de '"f's" ,  e  usando o botão code "<>"  ficou assim  :

#define _WIN32_WINNT 0x600
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <windows.h>
#include <locale.h>
#include <string.h>
#include <time.h>
int fim( HANDLE );
int main()
{
  HANDLE _h = GetStdHandle(STD_OUTPUT_HANDLE);
  SetConsoleTextAttribute( _h , 15 + (12 << 4 ) );
  /// Foram incluídas as bibliotecas
  /// Começamos a fazer o programa com Struct.
  /// Struct 1: Cadastro da Pessoa.
  struct
  {
    char nome  [30];
    char nome1 [30];
    char senha [20];
    char senha1[20];
    int  idade     ;
    char horas     ;
    char minutos   ;
  } cadastro_pessoa;
  /// Struct 2: Cadastro de Produtos
  struct
  {
    int   codigo             ;
    char  nome_produto   [30];
    char  data           [10];
    float preco              ;
    int   quantidade_produtos;
    int   estoque_maximo     ;
    int   estoque_minimo     ;
  }       cadastro_produtos  ;
  /// Struct 3: A entrada, a saída dos produtos
  struct
  {
    int  quantidade_retirada   ;
    int  quantidade_reposta    ;
    char data           [10]   ;
    int  valor_final           ;
  }      saida_entrada_produtos;
  /// Colocmos simples printf's para deixar o programa
  /// mais bonirto e adicionamos no programa a Linguagem
  /// Portuguesa, acrescentamos caracteres epeciais,
  /// tipo "," e até CÓDIOGS ALT(Ex: " ")
  setlocale(LC_ALL, "Portuguese");
  printf("\n\tIniciando o Programa  !           \n\
          \r Aguarde . . . !                    \n\
          \r Programa Iniciado Com Sucesso ! !  \n");
  /// Primeira parte do Programa: O Cadastro
  char cadrasto;
  /// OpCAo se possuí ou não Cadastro
  printf("\n\tjA possui um cadastro ? \n\
          \r S para SIM               \n\
          \r N para NÃO               \n\
          \r   sua resposta ?: ");
  scanf("%s", &cadrasto);
  /// Informar o nome
  if (cadrasto == 'N')
  {
    printf("\n-----cadastro-----\n\
            \r informe o seu nome: ");
    scanf("%s", cadastro_pessoa.nome);
    /// Informar a idade (com a função de não aceitar
    /// menores de 18 anos, ex: digitei 12, dá cadastro
    /// negado e imediatamente o programa fecha)
    printf("informe sua idade: ");
    /// Usamos o fflush para ignorar o botão "enter"
    fflush(stdin);
    scanf("%d", &cadastro_pessoa.idade);
    if (cadastro_pessoa.idade < 18)
    {
      printf("o programa não aceita menor de idade");
      fim( _h );
    }
  }
  /// Informar a senha
  printf("informe uma senha:");
  fflush(stdin);
  scanf("%s", cadastro_pessoa.senha);
  /// Agora chega a parte do login: informar nome e senha= login efetuado
  if (cadrasto == 'S')
  {
    printf("\n\n----login----\n\n");
    /// receber nome do usuario
    printf("informe seu nome: ");
    fflush(stdin);
    scanf("%s", cadastro_pessoa.nome1);
    /// informar uma senha
    printf("informe sua senha: ");
    fflush(stdin);
    scanf("%s", cadastro_pessoa.senha1);
    /// comparar se o usuario pois os dados certos
    int login_efetuado = 0;
    /// se a pessoa por os dados corretos
    if (strcmp(cadastro_pessoa.nome1, cadastro_pessoa.nome) == 0 &&
        strcmp(cadastro_pessoa.senha1, cadastro_pessoa.senha) == 0)
    {
      printf("\nlogin efetuado!!!\n");
    }
    /// se a pessoa por os dados incorretos
    else
    {
      printf("\n\nDADOS INVALIDOS!\n\n");
      fim( _h );
    }
  }
  /// Nova declaração
  char novo_produto = ' ';
  /// Começamos a usar o while, para poder determinar
  /// um n° de vezes que o usuário e o produto forem
  /// cadastrados, até dar um loop infinto se você desejar.
  while (novo_produto != 'N')
  {
    /// informações sobre o produtos
    printf("\n----informações do produto----");
    /// informar nome dos produtos que serão usados
    printf("\n\ninforme o nome do produto: ");
    scanf("%s", cadastro_produtos.nome_produto);
    /// informar codigo do produto
    printf("informe o código do produto: ");
    scanf("%d", &cadastro_produtos.codigo);
    /// informar preço que o produtos custara
    printf("informar preço do produto em R$: ");
    scanf("%f", &cadastro_produtos.preco);
    /// informar a quantidade de produtos
    printf("informe a quantidade de produtos: ");
    scanf("%d", &cadastro_produtos.quantidade_produtos);
    /// informar o maximo que o produto pode ter no estoque
    printf("informe estoque maximo do produto: ");
    scanf("%d", &cadastro_produtos.estoque_maximo);
    /// informar o minimo que esse produto pode chegar , criar alerta!
    printf("informe estoque minimo: ");
    scanf("%d", &cadastro_produtos.estoque_minimo);
    /// caso o estoque maximo seja menor que o minimo ou menor
    /// que a quantidade já registrada de produtos
    if( cadastro_produtos.estoque_maximo < cadastro_produtos.estoque_minimo    ||
        cadastro_produtos.estoque_maximo < cadastro_produtos.quantidade_produtos)
    {
      /// Caso você tenha cometido algum erro o programa
      /// aponta a mensagem abaixo e encerra
      fim( _h );
    }
    /// Alertar se o usuário informou alguum dado incorreto
    if (cadastro_produtos.estoque_maximo < cadastro_produtos.estoque_minimo ||
        cadastro_produtos.estoque_maximo < cadastro_produtos.quantidade_produtos)
    {
      fim( _h );
    }
    /// informar o horario que o produto chegou no estoque
    printf("informe a hora e minutos da chegada do produto no estoque:");
    scanf("%s:%s" , &cadastro_pessoa.horas , &cadastro_pessoa.minutos);
    if (cadastro_pessoa.horas < 24 )
    {
      printf("horario informado errado");
      fim( _h );
    }
    if (cadastro_pessoa.minutos < 60)
    {
      printf ("Minutos informado errado");
      fim( _h );
    }
    /// testar as opções do usuário(1 e 2)
    int opcao;
    /// Usuário 1:
    /// Usuário 2:
    printf("\n - digite 1: para informar a quantidade retirada do estoque\n\
            \r - digite 2: para informar a quantidade reposta noestoque\n\
            \r   Escolha uma das opções: ");
    scanf("%d", &opcao);
    /// caso usuario escolha opção 1 , iformara a quantidade retirada
    if (opcao == 1)
    {
      printf("\ninforme o código do produto: ");
      scanf("%d", &cadastro_produtos.codigo);
      printf("\ninforme a quantidade retirada do estoque: ");
      fflush(stdin);
      scanf("%d", &saida_entrada_produtos.quantidade_retirada);
    }
    /// casa usuario escolha opção 2 , informarás a quantidade somada ao estoque
    if (opcao == 2)
    {
      printf("\n\ninforme o código do produto: ");
      scanf("%d", &cadastro_produtos.codigo);
      printf("\ninforme a quantidade reposta do estoque: ");
      fflush(stdin);
      scanf("%d", &saida_entrada_produtos.quantidade_reposta);
    }
    /// opção invalida , mensagem de erro vai aparecer
    if (opcao != 1 && opcao != 2)
    {
      printf("\nOpCAo invAlida! ");
    }
    printf("\n  ---  Resumo  ---\n");
    printf("chegada do produto:%s , as: %s horas.\n",
           cadastro_pessoa.horas , cadastro_pessoa.minutos);
    /// para escrever não use & de endereco da variavel
    /// atribuir valor apos usuario ter escolhido opCAo
    /// mostrar valor retirada do estoque
    if (opcao == 1)
    {
      /// Novo resultado! perante ao dados informados
      printf("\nNovo total do produto: %d %s",
             cadastro_produtos.quantidade_produtos -
             saida_entrada_produtos.quantidade_retirada,
             cadastro_produtos.nome_produto);
      /// Quantidade de produtos, de retirada e valor final.
      saida_entrada_produtos.valor_final =
      cadastro_produtos.quantidade_produtos -
      saida_entrada_produtos.quantidade_retirada;
      fflush(stdin);
      /// Estoque Médio
      printf("\nEstoque mEdio: %d %s",
            (cadastro_produtos.estoque_maximo  +
             cadastro_produtos.estoque_minimo) / 2,
             cadastro_produtos.nome_produto      );
      fflush(stdin);
    }
    /// mostrar a quantidade reposta no estoque
    if (opcao == 2)
    {
      printf("\nQuantidade atualizada: %d",
             cadastro_produtos.quantidade_produtos     +
             saida_entrada_produtos.quantidade_reposta);
      fflush(stdin);
      saida_entrada_produtos.valor_final        =
      cadastro_produtos.quantidade_produtos     -
      saida_entrada_produtos.quantidade_retirada;
      fflush(stdin);
      printf("\nEstoque mEdio: %d",
            (cadastro_produtos.estoque_maximo  +
             cadastro_produtos.estoque_minimo) / 2);
      fflush(stdin);
    }
    /// caso o usuario deseja registrar um novo produto
    printf("\n\nescreva S para SIM\nescreva N para não\n\
            \rdeseja registrar um novo produto?: ");
    fflush(stdin);
    scanf("%s", &novo_produto);
  }
  /// Revela os valores atuais
  printf("\n----Valores atuais----\n");
  /// Nome do produto
  printf("\nNome do produto: %s", cadastro_produtos.nome_produto);
  getchar();
  /// Código do prodto
  printf("\nCodigo do produto: %d", cadastro_produtos.codigo);
  /// Quantidade em estoque
  printf("\nQuantidade de produtos em estoque: %d",
         saida_entrada_produtos.valor_final);
  /// Continua...
  return 0;
}
int fim( HANDLE _h )
{
  char buf[20], cuf[20];
  SetConsoleTextAttribute( _h , 12 + (11 << 4 ) );
  printf("\nERRO!! opções invalidas\nvocE informou errado o seu estoque :\n");
  SetConsoleTextAttribute( _h , 7 + (0 << 4 ) );
  printf("\n\tData %s\n\tHora %s\n",_strdate(buf),_strtime(cuf));
  printf("\n\n\n");
  exit(0);
}

 

Postado

@DaviKS Está bem no primeiro post de modo que um usuário novo possa ler de imediato.

 

Eis a diferença:

 

//Foram incluídas as bibliotecas
#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#include <time.h>
//Começamos a fazer o programa com Struct.

//Struct 1: Cadastro da Pessoa.
struct {
  char nome[30];
  char nome1[30];
  char senha[20];
  char senha1[20];
  int idade;
  char horas;
  char minutos;
} cadastro_pessoa;

//Struct 2: Cadastro de Produtos
struct {
  int codigo;
  char nome_produto[30];
  char data[10];
  float preco;
  int quantidade_produtos;
  int estoque_maximo;
  int estoque_minimo;
} cadastro_produtos;

//Struct 3: A entrada, a saída dos produtos
struct {
  int quantidade_retirada;
  int quantidade_reposta;
  char data[10];
  int valor_final;
} saida_entrada_produtos;

//Colocmos simples printf's para deixar o programa mais bonirto e adicionamos no programa a Linguagem Portuguesa, acrescentamos caracteres epeciais, tipo "," e até CÓDIOGS ALT(Ex: "█")
int main(void) {
  setlocale(LC_ALL, "Portuguese");
  printf("\nINICIANDO O PROGRAMA! ");
  printf("\n\nAGUARDE...");
  printf("\n\nPROGRAMA INICIADO COM SUCESSO!!");
  //Primeira parte do Programa: O Cadastro
  char cadrasto;

  //Opção se possuí ou não Cadastro
  printf(
      "\n\njá possui um cadastro?\nS para SIM\nN para NÃO\n\nsua resposta?: ");
  scanf("%s", &cadrasto);
//Informar o nome
  if (cadrasto == 'N') {
    printf("\n-----cadastro-----");
    printf("\n\ninforme o seu nome: ");
    scanf("%s", cadastro_pessoa.nome);
//Informar a idade (com a função de não aceitar menores de 18 anos, ex: digitei 12, dá cadastro negado e imediatamente o programa fecha)
    printf("informe sua idade: ");
//Usamos o fflush para ignorar o botão "enter"    
    fflush(stdin);
    scanf("%d", &cadastro_pessoa.idade);
    {
      if (cadastro_pessoa.idade < 18)
        {
          printf("o programa não aceita menor de idade");
          exit(0);
        }
    }
//Informar a senha
    printf("informe uma senha:");
    fflush(stdin);
    scanf("%s", cadastro_pessoa.senha);
  }
//Agora chega a parte do login: informar nome e senha= login efetuado
   if (cadrasto == 'S')
  {
  printf("\n\n----login----\n\n");
  // receber nome do usuario
  printf("informe seu nome: ");
  fflush(stdin);
  scanf("%s", cadastro_pessoa.nome1);

  // informar uma senha
  printf("informe sua senha: ");
  fflush(stdin);
  scanf("%s", cadastro_pessoa.senha1);

//comparar se o usuario pois os dados certos
int login_efetuado = 0;

//se a pessoa por os dados corretos
if (strcmp(cadastro_pessoa.nome1, cadastro_pessoa.nome) == 0 && strcmp(cadastro_pessoa.senha1, cadastro_pessoa.senha) == 0)
  {printf("\nlogin efetuado!!!\n");}

//se a pessoa por os dados incorretos
     else
      {
         printf("\n\nDADOS INVALIDOS!\n\n");
         exit(0);
      }

  }
//Nova declaração
  char novo_produto;
//Começamos a usar o while, para poder determinar um n° de vezes que o usuário e o produto forem cadastrados, até dar um loop infinto se você desejar.
  while (novo_produto != 'N') {
    
    // informações sobre o produtos
    printf("\n----informações do produto----");

    // informar nome dos produtos que serão usados
    printf("\n\ninforme o nome do produto: ");
    scanf("%s", cadastro_produtos.nome_produto);

    // informar codigo do produto
    printf("informe o código do produto: ");
    scanf("%d", &cadastro_produtos.codigo);

    // informar preço que o produtos custara
    printf("informar preço do produto em R$: ");
    scanf("%f", &cadastro_produtos.preco);

    // informar a quantidade de produtos
    printf("informe a quantidade de produtos: ");
    scanf("%d", &cadastro_produtos.quantidade_produtos);

    // informar o maximo que o produto pode ter no estoque
    printf("informe estoque maximo do produto: ");
    scanf("%d", &cadastro_produtos.estoque_maximo);

    // informar o minimo que esse produto pode chegar , criar alerta!
    printf("informe estoque minimo: ");
    scanf("%d", &cadastro_produtos.estoque_minimo);

    //caso o estoque maximo seja menor que o minimo ou menor que a quantidade já registrada de produtos
    if (cadastro_produtos.estoque_maximo < cadastro_produtos.estoque_minimo ||
        cadastro_produtos.estoque_maximo <
            cadastro_produtos.quantidade_produtos) {
      //Caso você tenha cometido algum erro o programa aponta a mensagem abaixo e encerra
      printf("\nERRO!! opções invalidas\nvocê informou errado o seu "
             "estoque :(");
      return 0;
    }

//Alertar se o usuário informou alguum dado incorreto
      if (cadastro_produtos.estoque_maximo < cadastro_produtos.estoque_minimo ||
        cadastro_produtos.estoque_maximo <
            cadastro_produtos.quantidade_produtos) {
      printf("\nERRO!! opções invalidas\nvocê informou errado o seu "
             "estoque :(");
      return 0;
    }

    //informar o horario que o produto chegou no estoque
    printf("informe a hora e minutos da chegada do produto no estoque:");
    scanf("%s:%s" , &cadastro_pessoa.horas , &cadastro_pessoa.minutos);

    if (cadastro_pessoa.horas < 24 ){
        printf("horario informado errado");
        return 0;
    }
    if (cadastro_pessoa.minutos < 60){
        printf ("Minutos informado errado");
      return 0;
    }
    
    // testar as opções do usuário(1 e 2)
    int opcao;
//Usuário 1:
    printf("\n-digite 1: para informar a quantidade retirada do estoque "
//Usuário 2:
           "\n\n-digite 2: para informar a quantidade reposta no "
           "estoque\n\nEscolha uma das opções: ");
    scanf("%d", &opcao);

    // caso usuario escolha opção 1 , iformara a quantidade retirada
    if (opcao == 1) {
      printf("\ninforme o código do produto: ");
      scanf("%d", &cadastro_produtos.codigo);
      
      printf("\ninforme a quantidade retirada do estoque: ");
      fflush(stdin);
      scanf("%d", &saida_entrada_produtos.quantidade_retirada);
    }
    
    // casa usuario escolha opção 2 , informarás a quantidade somada ao estoque
    if (opcao == 2) {
      printf("\n\ninforme o código do produto: ");
      scanf("%d", &cadastro_produtos.codigo);

      printf("\ninforme a quantidade reposta do estoque: ");
      fflush(stdin);
      scanf("%d", &saida_entrada_produtos.quantidade_reposta);
    }

    // opção invalida , mensagem de erro vai aparecer
    if (opcao != 1 && opcao != 2) {
      printf("\nopção invalida! ");
    }

    printf("\n\n---Resumo---");
    printf("\nhoras de chegada do produto:%s:%s", &cadastro_pessoa.horas , &cadastro_pessoa.minutos);
    // atribuir valor apos usuario ter escolhido opção

    //mostrar valor retirada do estoque
    if (opcao == 1) {
//Novo resultado! perante ao dados informados
      printf("\n\nNovo total do produto: %d %s",
             cadastro_produtos.quantidade_produtos -
            saida_entrada_produtos.quantidade_retirada,
             cadastro_produtos.nome_produto);
//Quantidade de produtos, de retirada e valor final.
      saida_entrada_produtos.valor_final =
          cadastro_produtos.quantidade_produtos -
          saida_entrada_produtos.quantidade_retirada;

      fflush(stdin);
//Estoque Médio
      printf("\nEstoque médio: %d %s",
             (cadastro_produtos.estoque_maximo +
              cadastro_produtos.estoque_minimo) /
                 2,
             cadastro_produtos.nome_produto);

      fflush(stdin);
    }

    // mostrar a quantidade reposta no estoque
    if (opcao == 2) {
      printf("\n\nQuantidade atualizada: %d",
             cadastro_produtos.quantidade_produtos +
                 saida_entrada_produtos.quantidade_reposta);

      fflush(stdin);

      saida_entrada_produtos.valor_final =
          cadastro_produtos.quantidade_produtos -
          saida_entrada_produtos.quantidade_retirada;

      fflush(stdin);

      printf("\nEstoque médio: %d", (cadastro_produtos.estoque_maximo +
                            cadastro_produtos.estoque_minimo) /
                                        2);

      fflush(stdin);
      }

//caso o usuario deseja registrar um novo produto
      
     printf("\n\nescreva S para SIM\nescreva N para NÃO\n\ndeseja registrar um "
           "novo produto?: ");
    fflush(stdin);
    scanf("%s", &novo_produto);
  }


//Revela os valores atuais
  printf("\n----Valores atuais----\n");

//Nome do produto
  printf("\nNome do produto: %s", cadastro_produtos.nome_produto);
  getchar();
//Código do prodto 
printf("\nCodigo do produto: %d", cadastro_produtos.codigo);
//Quantidade em estoque
  printf("\nQuantidade de produtos em estoque: %d",
         saida_entrada_produtos.valor_final);
// Continua...
}

 

 

Sobre o código postado, agora no formato mais legível:

 

  • Não está claro onde está a razão da pergunta. O que quer dizer com "inserir o while"?
     
  • seu programa tem muitos problemas e vai ter enorme trabalho em concluir isto assim. São muitos dos "erros" comuns, e vou copiar de uma lista que eu tenho aqui, porque são de fato comuns e deve ter a ver com o modo como ensinam ou deixam de ensinar essas coisas nos livros escolas e aulas. Vou colocar alguns mais abaixo na lista
     
  • Uma coisa antes de tudo: um programa de mais de 100 linhas e que não tem uma função sequer já tem um problema de construção. Sugiro reescrever com funções em mente. É muito mais simples. Não existe um programa sério sem funções.
     

Escreva em torno dos dados

 

Seu programa trata de dois cadastros, de pessoa e produto, mas não tem nenhum cadastro de pessoa ou produto. As estruturas tratam apenas uma Pessoa e um Produto

 

Pior ainda:
 

  • a única pessoa se chama cadastro_pessoa e é global ao programa todo. Nada bom.
     
  • o único produto se chama cadastro_produtos e é também global ao programa.
     

Isso quer dizer que o programa de mais de 300 linhas e uma função só trata um produto só e uma pessoa só.

 

Antes de pensar sequer em C ou outra linguagem o instrutor ou livro, ao pedir um programa assim,  já deveria ter ensinado algo sobre composição de dados, que é o que de fato vai importar, não porque seja a minha opinião mas porque programas são assim.

 

Vou mostrar um exemplo e depois a lista de que falei. Sugiro reescrever isso considerando essas notas.

 

struct
{
    char nome[30];
    char nome1[30];
    char senha[20];
    char senha1[20];
    int  idade;
    char horas;
    char minutos;
} cadastro_pessoa;

 

Chamar isso de cadastro de nada adianta: continua sendo uma única pessoa. E global. Péssima escolha: NUNCA use nada global. É um tiro no pé antes de sair correndo. O mesmo vale para o produto.

 

Compare com o comum:

 

#define LIMITE_PE_ 20  // limite de pessoas

typedef struct
{
    char nome[30];
    char nome1[30];
    char senha[20];
    char senha1[20];
    int  idade;
    char horas;
    char minutos;

}   Pessoa;  // uma pessoa

typedef struct
{
    unsigned cap;            // quantas cabem
    unsigned qtd;            // quantas tem
    Pessoa   p[LIMITE_PE_];  // as pessoas

}   Cadastro_PE;

 

Pessoa é uma pessoa. E é apenas um nome, um tipo definido pelo programa. Não cria nada. Só define.

 

E Cadastro_PE é sim um Cadastro. Simples de tudo: um vetor com um certo número de Pessoas, sem alocação dinâmica ou ponteiros nem nada. Só o mínimo para um protótipo e é assim que se deve começar um programa: pelos dados.

 

Entenda que assim pode ter muitos cadastros no mesmo programa. E são de fato cadastros onde cabem um certo número de Pessoa. E tem a noção de encapsulamento, o nome chique clássico de orientação a objetos, que coloca o limite e a quantia atual DENTRO de cada cadastro e assim pode apenas passar o tal cadastro de função para função e vai tudo junto. E aí pode mudar os campos dentro quando precisar sem mexer em toda parte do programa

 

Considere:

 

#define LIMITE_PE_ 20  // limite de pessoas
#define LIMITE_PR_ 20  // e produtos

typedef struct
{
    char nome[30];
    char nome1[30];
    char senha[20];
    char senha1[20];
    int  idade;
    char horas;
    char minutos;

}   Pessoa;  // uma pessoa

typedef struct
{
    unsigned cap;            // quantas cabem
    unsigned qtd;            // quantas tem
    Pessoa   p[LIMITE_PE_];  // as pessoas

}   Cadastro_PE;


typedef struct
{
    int   codigo;
    char  nome_produto[30];
    char  data[10];
    float preco;
    int   qtd;
    int   estoque_maximo;
    int   estoque_minimo;

}   Produto;

typedef struct
{
    unsigned cap;            // quantas cabem
    unsigned qtd;            // quantas tem
    Pessoa   p[LIMITE_PR_];  // as pessoas

}   Cadastro_PR;

 

e entenda como faria sua vida bem mais simples começando por isso antes de qualquer instrução de programa.

 

// Colocmos simples printf's para deixar o programa mais
// bonirto e adicionamos no programa a Linguagem Portuguesa,
// acrescentamos caracteres epeciais, tipo "," e até CÓDIOGS
// ALT(Ex: "█")

 

Deixar um programa que não funciona ainda mais bonito não é assim prioridade. Bem como acentos ou cedilhas. Muito menos caracteres especiais ou um menu. Nem comentários com acentos que podem nem sair nas telas ou na impressão.

 

  •  Ao usar scanf() ou alguma função da família, como fscanf() entenda que ela retorna um valor. E teste. É ingênuo deixar o programa seguir sem testar. TESTE sempre. Para 5 especificadores --- aquelas coisas com % na frente e que não tem um asterisco nem outro %, como "%d %d %f %f %d" scanf() pode ler de 0 a 5 itens ou dar erro e retornar -1. Então teste o retorno que vai estar entre -1 e 5...
  • não use fflush(): isso só está definido para fluxos de saída. Em alguns compiladores pode até funcionar, mas é um sinal de fez algo errado
  • Não existe "lixo de teclado": necessidades como de flush() na entrada indicam apenas que não entendeu bem o que está lendo e o que é a entrada via teclado, free form: o usuário pode digitar qualquer coisa e é o seu programa que tem que se virar O teclado tem ao menos 105 teclas de liberdade e o usuário pode digitar qualquer coisa em qualquer ordem
  • Nunca escreva um programa interativo. Não vai aprender nada. Não vai ganhar nada. Escreva e teste todas as funções. DEPOIS de tudo testado coloque a parte interativa. isso inclui claro o eventual menu.
  • evite ler do teclado a menos que seja o objetivo do problema. Ler de arquivos é muito mais simples, seguro e fácil de reproduzir. Não há razão para ficar parado em frente a tela minutos inventando nomes de campos e coisas assim: o efeito é que vai acabar não testando direito porque é difícil controlar e repetir testes.
  • Não misture entrada de dados ou formatação com a apresentação dos dados ou a lógica do programa, Isso é um desastre para manutenção e desenvolvimento
  • Um printf() de 6 linhas é muito, mas muito melhor que 6 printf() de 1 linha. E se só vai mostrar o texto puts() é ainda melhor e dezenas de vezes mais rápido que uma série de printf().
  • Ao usar uma estrutura de dados como uma lista, uma pilha ou fila entenda que ela é um container e nada tem a ver com os dados. Não misture NUNCA os dados com a estrutura porque só via complicar tudo. Em especial vai ficar muito mais difícil aproveitar a estrutura em outros programas, e essa é tod a razão de escrever isso.
  • Não use acentos. Em variáveis, em strings ou em comentários, a menos que o enunciado exija. Não vai aprender nada e só vai ter problemas
  • Nunca use variáveis globais. Isso é um pesadelo e sempre vai cair na sua cabeça. Em geral é proibido em empresas e escolas. Não declare NADA fora de main()

   
 

 

 

  • Obrigado 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 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...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!