Ir ao conteúdo
  • Cadastre-se

C Não consigo voltar em c


L3ozao

Posts recomendados

Olá, estou com um problema nessa parte do meu código, após apertar 0 para voltar ao menu, o sistema não volta e fica travado nessa tela de cadastro, alguém me ajuda? 

 

Estou começando a programar e sou novo no fórum...

 

 

//CadastroMED***********************************************
int cadastramed(void){
    clrscr();


line();
      center(2,SISTEMA2 );
    center(1,"MÓDULO DE CADASTRAMENTO\n");
    center(3,"Digite os dados abaixo\n");
  line();
    do{
       gotoxy(1,22);//clearline()
       gotoxy(1,23);//clearline()
       printf("Digite[0] para voltar ao menu                     ");
       tela();
       gotoxy(18,10);fflush(stdin);
       scanf("%d",&NR_CLI);
       gotoxy(1,23);//clearline();
       if(NR_CLI!=0){
          if(pesquisa(NR_CLI)==1)
          {
             //Apresenta os dados caso exista no arquivo/
             mostradados();
             gotoxy(1,22);
             if(CLIENTE.EXCLUIDO!=1)printf("Este registro ja existe    ");
             else printf("Este registro foi excluido    ");
             gotoxy(1,23);
             printf("Tecle <Enter> para nova tentativa   ");
             fflush(stdin);
             while((TECLA=getchar())!='\n')
             gotoxy(33,23);
             gotoxy(1,22);clearline();
          }
          else{
             //Localiza posicao para gravar registro/

             //Grava registro/
             gotoxy(18,11);
             fflush(stdin);fgets(CLIENTE.NOME,31,stdin);
             gotoxy(18,12);
             fflush(stdin);fgets(CLIENTE.ENDERECO,100,stdin);
             gotoxy(18,13);
             fflush(stdin);scanf("%d",&CLIENTE.CEP);
             gotoxy(18,14);
             fflush(stdin);scanf("%d",&CLIENTE.TELEFONE);
             gotoxy(18,15);
             fflush(stdin);fgets(CLIENTE.EMAIL,60,stdin);
             CLIENTE.CODIGO=NR_CLI;
             CLIENTE.EXCLUIDO = 0;

             gotoxy(1,23);
             printf("Tecle <Enter> para nova tentativa   ");
             fflush(stdin);
             while((TECLA = getchar())!='\n')
                gotoxy(33,23);
          }
       }
    }while(NR_CLI != 0);

    return(0);
}





o Codigo todo....
  
  #include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#define clrscr() (system("CLS"))//
#include <conio.h>
#include <string.h>
#include <locale.h>
#define u GetStdHandle(STD_OUTPUT_HANDLE)
#define textcolor_2(l,f) SetConsoleTextAttribute(u,l+(f<<4));
#define gotoxy_2(x,y) {COORD c={x,y};SetConsoleCursorPosition(u,c);}


/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main() {
    setlocale(LC_ALL, "Portuguese");

cadastro();
}


     void gotoxy(int x, int y){
     COORD coord;
     coord.X=(short)x;
     coord.Y=(short)y;
     SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);
}

/**********/
   struct REG_CLI{
   int CODIGO;
   char NOME[31];
   char ENDERECO[100];
   int CEP;
   int TELEFONE;
   char EMAIL[60];
   int EXCLUIDO;
};
struct REG_CLI CLIENTE;

int I,NR_CLI,ESCOLHA;
char OPT[2];
char RESP,TECLA;
char SISTEMA1[33]="PROGRAMA DE CADASTRO DE PACIENTES";
char SISTEMA2[33]="PROGRAMA DE CADASTRO DE MÉDICOS";
char SISTEMA4[38]="PROGRAMA DE CADASTRO DE FUNCIONÁRIOS";
/**********/
void line(void);
void center(int LINHA, char *MENSAGEM);
void tela(void);
void mostradados(void);
int PESQUISA(int NUMERO);
int cadastrapac(void);
int cadastramed(void);
int cadastrafun(void);
int cadastra1(void);
int consulta(void);
int info(void);
int agendar(void);
int editar(void);
int cor(void);
int exclusao(int NUMERO);
/**********/
void clearline(void){
     printf("                                                                                 ");
     return;
}
/**********/
  int cadastro()
{
  //Verifica existencia do arquivo, se não existe, cria/
  char OPCAO;
 {


  }
  do{
     system("COLOR 0F");
     clrscr();
     line();
printf("\n           MM    MM  EEEEEEE  DDDDD     CCCCC  LL       IIIII  NN   NN \n");
printf("           MMM  MMM  EE       DD  DD   CC      LL        III   NNN  NN \n");
printf("           MM MM MM  EEEEE    DD   DD  CC      LL        III   NN N NN \n");
printf("           MM    MM  EE       DD   DD  CC      LL        III   NN  NNN \n");
printf("           MM    MM  EEEEEEE  DDDDDD    CCCCC  LLLLLLL  IIIII  NN   NN \n");
line();
     gotoxy(26,9);printf("informações.............[1]");
     gotoxy(26,11);printf("Cadastrar...............[2]");
     gotoxy(26,13);printf("Agendamento.............[3]");
     gotoxy(26,15);printf("Consultar/Editar........[4]");
     gotoxy(26,17);printf("Excluir.................[5]");
     gotoxy(26,19);printf("Finalizar e salvar......[6]");
     gotoxy(26,21);printf("Entre com a opcao: ");

     scanf("%c",&OPCAO);fflush(stdin);
     switch(OPCAO){

        case '1':ESCOLHA=0;info();break;
        case '2':ESCOLHA=0;cadastra1();break;
        case '3':ESCOLHA=0;agendar();break;
        case '4':ESCOLHA=0;consultar();break;
        case '5':ESCOLHA=1;consultar();break;

     }
  }while(OPCAO!='6');

  gotoxy(1,23);
  return(0);
}
/**********/
//Troca uma linha/
   void line(void){
     int POSICAO;
     for(POSICAO=0;POSICAO<80;POSICAO++)
       printf("¦");
     return;
}
//Centraliza uma mensagem no video em uma determinada linha/
void center(int LINHA, char *MENSAGEM){
     int COLUNA;
     COLUNA = ((80-strlen(MENSAGEM))/2);
     gotoxy(COLUNA,LINHA);
     printf(MENSAGEM);
     return;
}

////////////////////////////////////////////// CADASTRAR//////////////////////////////////////////////
int cadastra1(){
    clrscr();
  line();
        center(1,"MÓDULO DE CADASTRAMENTO\n");
        center(3,"Digite os dados abaixo\n");
  line();
    char OPCAO;



     gotoxy(26,7);printf("Cadastrar Paciente____________[1]");
     gotoxy(26,9);printf("Cadastrar Médico______________[2]");
     gotoxy(26,11);printf("Cadastrar Funcionário_________[3]");
     gotoxy(26,13);printf("Voltar________________________[0]");
     gotoxy(26,15);printf("Entre com a opcao:");
     scanf("%c",&OPCAO);fflush(stdin);
     switch(OPCAO){
        case '1':ESCOLHA=0;cadastrapac();break;
        case '2':ESCOLHA=0;cadastramed();break;
        case '3':ESCOLHA=0;cadastrafun();break;
        case '0':ESCOLHA=0;cadastro();break;

 }
        while(OPCAO!='0');

        gotoxy(1,23);
    return(0);
}



//Apresenta a tela de cadastro e consulta/
/**********/
void tela(void){

     gotoxy(18,10);clearline();
     gotoxy(18,11);clearline();
     gotoxy(18,12);clearline();
     gotoxy(18,13);clearline();
     gotoxy(18,14);clearline();
     gotoxy(18,15);clearline();
     gotoxy(1,10);printf("Codigo......:");
     gotoxy(1,11);printf("Nome........:");
     gotoxy(1,12);printf("Endereco....:");
     gotoxy(1,13);printf("CEP.........:");
     gotoxy(1,14);printf("Telefone....:");
     gotoxy(1,15);printf("E-Mail......:");
     return;
}
//Mostra os dados quando da consulta ou tentativa de cadastro/
/**********/
void mostradados(void){
     gotoxy(18,10);printf("%d",NR_CLI);
     gotoxy(18,11);printf("%s",CLIENTE.NOME);
     gotoxy(18,12);printf("%s",CLIENTE.ENDERECO);
     gotoxy(18,13);printf("%d",CLIENTE.CEP);
     gotoxy(18,14);printf("%d",CLIENTE.TELEFONE);
     gotoxy(18,15);printf("%s",CLIENTE.EMAIL);
     return;
}
/**********/
int pesquisa(int NUMERO){
    int ACHOU = 0;

   {

       if(NUMERO==CLIENTE.CODIGO)
          ACHOU = 1;
    }
    return(ACHOU);
}
/**********/
//Exclusão de clientes//***********************************
int exclusao(int NUMERO){


    CLIENTE.EXCLUIDO=1;

    printf("Registro excluido! Pressione <Enter> para prosseguir                       ");

}
/**********/
//Cadastramento de dados/**********************************
int cadastrapac(void){
    clrscr();
    line();
    center(2,SISTEMA1);
    center(1,"MÓDULO DE CADASTRAMENTO\n");
    center(3, "Digite os dados abaixo \n");
    line();

    do{
       gotoxy(1,22);//clearline()
       gotoxy(1,23);//clearline()
       printf("Digite[0] para voltar ao menu                     ");
       tela();
       gotoxy(18,10);fflush(stdin);
       scanf("%d",&NR_CLI);
       gotoxy(1,23);//clearline();
       if(NR_CLI!=0){
          if(pesquisa(NR_CLI)==1)
          {
             //Apresenta os dados caso exista no arquivo/
             mostradados();
             gotoxy(1,22);
             if(CLIENTE.EXCLUIDO!=1)printf("Este registro ja existe    ");
             else printf("Este registro foi excluido    ");
             gotoxy(1,23);
             printf("Tecle <Enter> para nova tentativa   ");
             fflush(stdin);
             while((TECLA=getchar())!='\n')
             gotoxy(33,23);
             gotoxy(1,22);clearline();
          }
          else{
             //Localiza posicao para gravar registro/

             //Grava registro/
             gotoxy(18,11);
             fflush(stdin);fgets(CLIENTE.NOME,31,stdin);
             gotoxy(18,12);
             fflush(stdin);fgets(CLIENTE.ENDERECO,100,stdin);
             gotoxy(18,13);
             fflush(stdin);scanf("%d",&CLIENTE.CEP);
             gotoxy(18,14);
             fflush(stdin);scanf("%d",&CLIENTE.TELEFONE);
             gotoxy(18,15);
             fflush(stdin);fgets(CLIENTE.EMAIL,60,stdin);
             CLIENTE.CODIGO=NR_CLI;
             CLIENTE.EXCLUIDO = 0;

             gotoxy(1,23);
             printf("Tecle <Enter> para nova tentativa   ");
             fflush(stdin);
             while((TECLA = getchar())!='\n')
                gotoxy(33,23);
          }
       }
    }
    while(NR_CLI != 0);

    return(0);
}
//CadastroMED***********************************************
int cadastramed(void){
    clrscr();


line();
      center(2,SISTEMA2 );
    center(1,"MÓDULO DE CADASTRAMENTO\n");
    center(3,"Digite os dados abaixo\n");
  line();
    do{
       gotoxy(1,22);//clearline()
       gotoxy(1,23);//clearline()
       printf("Digite[0] para voltar ao menu                     ");
       tela();
       gotoxy(18,10);fflush(stdin);
       scanf("%d",&NR_CLI);
       gotoxy(1,23);//clearline();
       if(NR_CLI!=0){
          if(pesquisa(NR_CLI)==1)
          {
             //Apresenta os dados caso exista no arquivo/
             mostradados();
             gotoxy(1,22);
             if(CLIENTE.EXCLUIDO!=1)printf("Este registro ja existe    ");
             else printf("Este registro foi excluido    ");
             gotoxy(1,23);
             printf("Tecle <Enter> para nova tentativa   ");
             fflush(stdin);
             while((TECLA=getchar())!='\n')
             gotoxy(33,23);
             gotoxy(1,22);clearline();
          }
          else{
             //Localiza posicao para gravar registro/

             //Grava registro/
             gotoxy(18,11);
             fflush(stdin);fgets(CLIENTE.NOME,31,stdin);
             gotoxy(18,12);
             fflush(stdin);fgets(CLIENTE.ENDERECO,100,stdin);
             gotoxy(18,13);
             fflush(stdin);scanf("%d",&CLIENTE.CEP);
             gotoxy(18,14);
             fflush(stdin);scanf("%d",&CLIENTE.TELEFONE);
             gotoxy(18,15);
             fflush(stdin);fgets(CLIENTE.EMAIL,60,stdin);
             CLIENTE.CODIGO=NR_CLI;
             CLIENTE.EXCLUIDO = 0;

             gotoxy(1,23);
             printf("Tecle <Enter> para nova tentativa   ");
             fflush(stdin);
             while((TECLA = getchar())!='\n')
                gotoxy(33,23);
          }
       }
    }while(NR_CLI != 0);

    return(0);
}

//CadastroFuncionario*******************************

int cadastrafun(void){
    clrscr();
    line();
    center(2,SISTEMA4);
    center(1,"MÓDULO DE CADASTRAMENTO \n");
    center(3,"Digite os dados abaixo \n");
    line();

    do{
       gotoxy(1,22);//clearline()
       gotoxy(1,23);//clearline()
       printf("Digite[0] para voltar ao menu                     ");
       tela();
       gotoxy(18,10);fflush(stdin);
       scanf("%d",&NR_CLI);
       gotoxy(1,23);//clearline();
       if(NR_CLI!=0){
          if(pesquisa(NR_CLI)==1)
          {
             //Apresenta os dados caso exista no arquivo/
             mostradados();
             gotoxy(1,22);
             if(CLIENTE.EXCLUIDO!=1)printf("Este registro ja existe    ");
             else printf("Este registro foi excluido    ");
             gotoxy(1,23);
             printf("Tecle <Enter> para nova tentativa   ");
             fflush(stdin);
             while((TECLA=getchar())!='\n')
             gotoxy(33,23);
             gotoxy(1,22);clearline();
          }
          else{
             //Localiza posicao para gravar registro/

             //Grava registro/
             gotoxy(18,11);
             fflush(stdin);fgets(CLIENTE.NOME,31,stdin);
             gotoxy(18,12);
             fflush(stdin);fgets(CLIENTE.ENDERECO,100,stdin);
             gotoxy(18,13);
             fflush(stdin);scanf("%d",&CLIENTE.CEP);
             gotoxy(18,14);
             fflush(stdin);scanf("%d",&CLIENTE.TELEFONE);
             gotoxy(18,15);
             fflush(stdin);fgets(CLIENTE.EMAIL,60,stdin);
             CLIENTE.CODIGO=NR_CLI;
             CLIENTE.EXCLUIDO = 0;

             gotoxy(1,23);
             printf("Tecle <Enter> para nova tentativa   ");
             fflush(stdin);
             while((TECLA = getchar())!='\n')
                gotoxy(33,23);
          }
       }
    }while(NR_CLI != 0);

    return(0);
}



//Agendar//
 int agendar(void) {
        clrscr();
        center(3,"AGENDAMENTO\n");

 getchar();


}
/**********/
//Informação//
int info (void) {
 clrscr();
    line();
    center(3,"INFORMAÇÕES DO SISTEMA\n");
textcolor_2(9,15);
    printf("SISTEMAS PARA CLINICAS \n\n\n");

getchar();



    return(0);

}
//Consulta dos dados/
int consultar(void){
    clrscr();
    line();

    center(1,"MÓDULO DE CONSULTA\n");
    center(3,"Digite o número do codigo:\n");

    line();
    do{
       gotoxy(1,22);//clearline();
       gotoxy(1,23);//clearline();
       printf("Digite [0] para voltar ao menu                                   ");
       tela();
       gotoxy(18,10);fflush(stdin);scanf("%d",&NR_CLI);
       gotoxy(1,23);//clearline();
       if(NR_CLI != 0){
          I=pesquisa(NR_CLI);
          if(I==1&&CLIENTE.EXCLUIDO==0){
             //Apresenta os dados caso exista no arquivo/
             mostradados();
             alterar:
             gotoxy(1,23);clearline();gotoxy(1,23);
             if(ESCOLHA==0)
             {
              printf("Deseja editar esse registro(S/N)?");fflush(stdin);fgets(OPT,2,stdin);
              if(strcmp(OPT,"n")==0||strcmp(OPT,"N")==0){}
              else if(strcmp(OPT,"s")==0||strcmp(OPT,"S")==0){
                editar();
              }
              else{
                gotoxy(1,23);clearline();gotoxy(1,23);
                printf("Digite S ou N! Pressione <Enter> para continuar...   ");
                while((TECLA=getchar())!='\n')
                  gotoxy(33,23);
                goto alterar;
              }
             }
             else
             {
              printf("Deseja excluir esse registro(S/N)?");fflush(stdin);fgets(OPT,2,stdin);
              if(strcmp(OPT,"n")==0||strcmp(OPT,"N")==0){}
              else if(strcmp(OPT,"s")==0||strcmp(OPT,"S")==0)
              {
                gotoxy(1,23);clearline();gotoxy(1,23);
                exclusao(NR_CLI);
              }
              else{
                gotoxy(1,23);clearline();gotoxy(1,23);
                printf("Digite S ou N! Pressione <Enter> para continuar...   ");
                while((TECLA=getchar())!='\n')
                  gotoxy(33,23);
                goto alterar;
              }
             }
             gotoxy(1,23);
             printf("Tecle <Enter> para nova tentativa                    ");
             fflush(stdin);
             while((TECLA=getchar())!='\n')
                gotoxy(33,23);
          }
          else{
             gotoxy(1,22);
             if(CLIENTE.EXCLUIDO!=1)
                printf("Este registro nao esta cadastrado                   ");
             else{
                printf("Este registro esta excluido                         ");
                mostradados();
             }
             gotoxy(1,23);
             printf("Tecle <Enter> para nova tentativa                   ");
             fflush(stdin);
             while((TECLA=getchar())!='\n')
                gotoxy(33,23);
             gotoxy(1,22);
             printf("                                    ");
          }
       }
    }while(NR_CLI!=0);
    return(0);
}
/*********/
//Edição de dados/
int editar(void){
   //Alterações e miscelenia/
   char OPCAO;
   int achou=2;
   do{
      gotoxy(1,23);printf("[1]Nome|[2]Endereco|[3]CEP|[4]Telefone|[5]Email|[6]Confirma|[7]Abandona:");
      fflush(stdin);OPCAO=getchar();
      switch(OPCAO){
         case '1':
              gotoxy(18,11);printf("                                           ");gotoxy(18,11);
              fflush(stdin);fgets(CLIENTE.NOME,31,stdin);
              break;
         case '2':
              gotoxy(18,12);printf("                                                     ");gotoxy(18,12);
              fflush(stdin);fgets(CLIENTE.ENDERECO,100,stdin);
              break;
         case '3':
              gotoxy(18,13);printf("                                           ");gotoxy(18,13);
              fflush(stdin);scanf("%d",&CLIENTE.CEP);
              break;
         case '4':
              gotoxy(18,14);printf("                                           ");gotoxy(18,14);
              fflush(stdin);scanf("%d",&CLIENTE.TELEFONE);
              break;
         case '5':
              gotoxy(18,15);printf("                                           ");gotoxy(18,15);
              fflush(stdin);fgets(CLIENTE.EMAIL,60,stdin);
              break;
         case '6':
              Confirma:
              gotoxy(1,23);clearline();gotoxy(1,23);
              printf("Confirma a edicao desse registro(S/N)?");fflush(stdin);fgets(OPT,2,stdin);
              if(strcmp(OPT,"n")==0||strcmp(OPT,"N")==0){}
              else if(strcmp(OPT,"s")==0||strcmp(OPT,"S")==0){
                 achou=0;
              }
              else{
                 gotoxy(1,23);
                 printf("Digite S ou N! Pressione <Enter> para continuar...       ");
                 while((TECLA=getchar())!='\n')
                   gotoxy(33,23);
                 goto Confirma;
              }
              break;
         case '7':
              Cancela:
              gotoxy(1,23);clearline();gotoxy(1,23);
              printf("Abandona a edicao desse registro(S/N)?");fflush(stdin);fgets(OPT,2,stdin);
              if(strcmp(OPT,"n")==0||strcmp(OPT,"N")==0){}
              else if(strcmp(OPT,"s")==0||strcmp(OPT,"S")==0){
                 achou=1;
              }
              else{
                 gotoxy(1,23);clearline();gotoxy(1,23);
                 printf("Digite S ou N! Pressione <Enter> para continuar...      ");
                 while((TECLA=getchar())!='\n')
                   gotoxy(33,23);
                 goto Cancela;
              }
              break;
      }
      gotoxy(71,23);printf("         ");
   }while(achou!=0&&achou!=1);
   gotoxy(1,23);
   if(achou==0){


      printf("Sucesso na alteracao do registro! Pressione <Enter> para prosseguir   ");
   }
   else
   {
      printf("Registro alterado! Pressione <Enter> para prosseguir   ");
   }
   fflush(stdin);
   while((TECLA = getchar())!='\n')
      gotoxy(33,23);
   gotoxy(1,23);clearline();
   return(0);
}

 

  • Amei 1
Link para o comentário
Compartilhar em outros sites

Escreva seu programa aos poucos se está começando.

 

Está praticamente desenhando linha a linha o programa e assim vai ter um trabalho enorme para testar e manter isso.

Sugiro reordenar tudo isso. Não usar void e usar sim mais parâmetros. E não misturar lógica com detalhes da tela e muito menos de posicionamento do cursor.

 

main() deve ser a primeira função de todo programa. Se possível em um arquivo separado.

 

Tem muitos potenciais problemas em seu programa. 

Se tem tantas funções, porque não tem uma função para o menu que mostra o menu, le a opção e retorna?
 

    int menu();

 

  • LEIA o retorno de scanf().
  • scanf() retorna um int. Teste. 
  • Não tente nunca ler um único char com scanf(). Ainda mais para ler uma simples letra como opção de um menu.
    Leia algo como nessa função de 4 linhas:
     
    #include <stdio.h>
    
    char menu();
    
    int main(void)
    {
        printf("Use control-C para encerrar...\n\n\n");
        while(1)
        {
            char opcao = menu();
            printf("\n\tEm main(): opcao foi '%c', %d em decimal\n", opcao,opcao);
        };
        return 0;
    }
    
    char menu()
    {
        char linha[8];
        printf("Sua opcao: ");
        fgets(linha,8,stdin);
        return linha[0];
    };

     

Ela sempre retorna a letra, mesmo que o cara digite 500 letras.

 

 

 

  • Curtir 1
  • Amei 1
Link para o comentário
Compartilhar em outros sites

@L3ozao    notei que você gosta de escrever ,  para treinar a digitação ,  pois você escreve essa palavra " (void) " um montão de vezes no seu código todo , ou você acredita que ela tenha alguma utilidade nesse contexto ? , e outra é que você também gosta de colocar parênteses nos return's , e  isso não faz nenhuma diferença para o compilador ,  e também  seria bom fazer uma identação do código para ficar mais fácil de identificar algum erro de digitação , e creio que  hum erro , que esteja fazendo ficar em Loop , está na função cadastral , onde você colocou uma chamada para a própria função cadastro e assim ao digitar zero ele volta para a função cadastro e fica nesse Loop ethernamente , e seu código com algumas modificações poderia ser assim :

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#define clrscr() (system("CLS"))//
#include <conio.h>
#include <string.h>
#include <locale.h>
#define u GetStdHandle(STD_OUTPUT_HANDLE)
#define textcolor_2(l,f) SetConsoleTextAttribute(u,l+(f<<4));
#define gotoxy_2(x,y) {COORD c={x,y};SetConsoleCursorPosition(u,c);}
/**********/
struct REG_CLI{
   int CODIGO;
   char NOME[31];
   char ENDERECO[100];
   int CEP;
   int TELEFONE;
   char EMAIL[60];
   int EXCLUIDO;
};
struct REG_CLI CLIENTE;

int I,NR_CLI,ESCOLHA;
char OPT[2];
char RESP,TECLA;
char SISTEMA1[35]="PROGRAMA DE CADASTRO DE PACIENTES";
char SISTEMA2[35]="PROGRAMA DE CADASTRO DE MÉDICOS";
char SISTEMA4[40]="PROGRAMA DE CADASTRO DE FUNCIONÁRIOS";
/**********/
int cadastro();
int consultar();
void line(void);
void center(int LINHA, char *MENSAGEM);
void tela(void);
void mostradados(void);
int PESQUISA(int NUMERO);
int cadastrapac(void);
int cadastramed(void);
int cadastrafun(void);
int cadastra1(void);
int consulta(void);
int info(void);
int agendar(void);
int editar(void);
int cor(void);
int exclusao(int NUMERO);
/**********/


/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main()
{
    setlocale(LC_ALL, "Portuguese");
    cadastro();
    return 4096;
}


     void gotoxy(int x, int y){
     COORD coord;
     coord.X=(short)x;
     coord.Y=(short)y;
     SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);
}

void clearline(void){
     printf("                                                                                 ");
     return;
}
/**********/
int cadastro()
{
    //Verifica existencia do arquivo, se não existe, cria/
    char OPCAO;
    do{
        system("COLOR 0F");
        clrscr();
        line();
        printf("\n");
        printf("           MM    MM  EEEEEEE  DDDDD     CCCCC  LL       IIIII  NN   NN \n");
        printf("           MMM  MMM  EE       DD  DD   CC      LL        III   NNN  NN \n");
        printf("           MM MM MM  EEEEE    DD   DD  CC      LL        III   NN N NN \n");
        printf("           MM    MM  EE       DD   DD  CC      LL        III   NN  NNN \n");
        printf("           MM    MM  EEEEEEE  DDDDDD    CCCCC  LLLLLLL  IIIII  NN   NN \n");
        line();
        gotoxy(26, 9);printf("informações.............[1]");
        gotoxy(26,11);printf("Cadastrar...............[2]");
        gotoxy(26,13);printf("Agendamento.............[3]");
        gotoxy(26,15);printf("Consultar/Editar........[4]");
        gotoxy(26,17);printf("Excluir.................[5]");
        gotoxy(26,19);printf("Finalizar e salvar......[6]");
        gotoxy(26,21);printf("Entre com a opcao: ");
        fflush(stdin);      // limpar o BUFFER antes
        scanf("%c",&OPCAO); // senão pega as sijeiras q estão lá
        switch(OPCAO){
        case '1':
            ESCOLHA=0;
            info();
            break;
        case '2':
            ESCOLHA=0;
            cadastra1();
            break;
        case '3':
            ESCOLHA=0;
            agendar();
            break;
        case '4':
            ESCOLHA=0;
            consultar();
            break;
        case '5':
            ESCOLHA=1;
            consultar();
            break;
        case '6':
            printf("Saiundo . . . !\n\n\n");
        }
    }while(OPCAO!='6');
    //gotoxy(1,23);
    return 0;
}
/**********/
//Troca uma linha/
   void line(void){
     int POSICAO;
     for(POSICAO=0;POSICAO<80;POSICAO++)
       printf("¦");
     return;
}
//Centraliza uma mensagem no video em uma determinada linha/
void center(int LINHA, char *MENSAGEM){
     int COLUNA;
     COLUNA = ((80-strlen(MENSAGEM))/2);
     gotoxy(COLUNA,LINHA);
     printf(MENSAGEM);
     return;
}

////////////////////////////////////////////// CADASTRAR//////////////////////////////////////////////
int cadastra1()
{
    clrscr();
    line();
    center(1,"MÓDULO DE CADASTRAMENTO\n");
    center(3,"Digite os dados abaixo\n");
    line();
    char OPCAO;
    do
    {
        gotoxy(26, 7);printf("Cadastrar Paciente____________[1]");
        gotoxy(26, 9);printf("Cadastrar Médico______________[2]");
        gotoxy(26,11);printf("Cadastrar Funcionário_________[3]");
        gotoxy(26,13);printf("Voltar________________________[0]");
        gotoxy(26,15);printf("Entre com a opcao:");
        fflush(stdin);       // primeiro Limpar o BuFFer
        scanf("%c",&OPCAO);  //senão prga tudas as sujeiras q tem lá
        switch(OPCAO)
        {
        case '1':
            ESCOLHA=0;
            cadastrapac();
           break;
        case '2':
            ESCOLHA=0;
            cadastramed();
            break;
        case '3':
            ESCOLHA=0;
            cadastrafun();
            break;
        case '0':
            ESCOLHA=0;
            //cadastro();
            break;
        }
    }while( OPCAO != '0' );
    gotoxy(1,23);
    return 0;
}



//Apresenta a tela de cadastro e consulta/
/**********/
void tela(void){

     gotoxy(18,10);clearline();
     gotoxy(18,11);clearline();
     gotoxy(18,12);clearline();
     gotoxy(18,13);clearline();
     gotoxy(18,14);clearline();
     gotoxy(18,15);clearline();
     gotoxy(1,10);printf("Codigo......:");
     gotoxy(1,11);printf("Nome........:");
     gotoxy(1,12);printf("Endereco....:");
     gotoxy(1,13);printf("CEP.........:");
     gotoxy(1,14);printf("Telefone....:");
     gotoxy(1,15);printf("E-Mail......:");
     return;
}
//Mostra os dados quando da consulta ou tentativa de cadastro/
/**********/
void mostradados(void){
     gotoxy(18,10);printf("%d",NR_CLI);
     gotoxy(18,11);printf("%s",CLIENTE.NOME);
     gotoxy(18,12);printf("%s",CLIENTE.ENDERECO);
     gotoxy(18,13);printf("%d",CLIENTE.CEP);
     gotoxy(18,14);printf("%d",CLIENTE.TELEFONE);
     gotoxy(18,15);printf("%s",CLIENTE.EMAIL);
     return;
}
/**********/
int pesquisa(int NUMERO){
    int ACHOU = 0;

   {

       if(NUMERO==CLIENTE.CODIGO)
          ACHOU = 1;
    }
    return(ACHOU);
}
/**********/
//Exclusão de clientes//***********************************
int exclusao(int NUMERO){


    CLIENTE.EXCLUIDO=1;

    printf("Registro excluido! Pressione <Enter> para prosseguir                       ");

}
/**********/
//Cadastramento de dados/**********************************
int cadastrapac(void){
    clrscr();
    line();
    center(2,SISTEMA1);
    center(1,"MÓDULO DE CADASTRAMENTO\n");
    center(3, "Digite os dados abaixo \n");
    line();

    do{
       gotoxy(1,22);//clearline()
       gotoxy(1,23);//clearline()
       printf("Digite[0] para voltar ao menu                     ");
       tela();
       gotoxy(18,10);fflush(stdin);
       scanf("%d",&NR_CLI);
       gotoxy(1,23);//clearline();
       if(NR_CLI!=0){
          if(pesquisa(NR_CLI)==1)
          {
             //Apresenta os dados caso exista no arquivo/
             mostradados();
             gotoxy(1,22);
             if(CLIENTE.EXCLUIDO!=1)printf("Este registro ja existe    ");
             else printf("Este registro foi excluido    ");
             gotoxy(1,23);
             printf("Tecle <Enter> para nova tentativa   ");
             fflush(stdin);
             while((TECLA=getchar())!='\n')
             gotoxy(33,23);
             gotoxy(1,22);clearline();
          }
          else{
             //Localiza posicao para gravar registro/

             //Grava registro/
             gotoxy(18,11);
             fflush(stdin);fgets(CLIENTE.NOME,31,stdin);
             gotoxy(18,12);
             fflush(stdin);fgets(CLIENTE.ENDERECO,100,stdin);
             gotoxy(18,13);
             fflush(stdin);scanf("%d",&CLIENTE.CEP);
             gotoxy(18,14);
             fflush(stdin);scanf("%d",&CLIENTE.TELEFONE);
             gotoxy(18,15);
             fflush(stdin);fgets(CLIENTE.EMAIL,60,stdin);
             CLIENTE.CODIGO=NR_CLI;
             CLIENTE.EXCLUIDO = 0;

             gotoxy(1,23);
             printf("Tecle <Enter> para nova tentativa   ");
             fflush(stdin);
             while((TECLA = getchar())!='\n')
                gotoxy(33,23);
          }
       }
    }
    while(NR_CLI != 0);

    return(0);
}
//CadastroMED***********************************************
int cadastramed()
{
    clrscr();
    line();
    center(2,SISTEMA2 );
    center(1,"MÓDULO DE CADASTRAMENTO\n");
    center(3,"Digite os dados abaixo\n");
    line();
    do{
        gotoxy(1,22);//clearline()
        gotoxy(1,23);//clearline()
        printf("Digite[0] para voltar ao menu                     ");
        tela();
        gotoxy(18,10);
        fflush(stdin);
        scanf("%d",&NR_CLI);
        gotoxy(1,23);//clearline();
        if( NR_CLI != 0 )
        {
            if(pesquisa(NR_CLI)==1)
            {
                //Apresenta os dados caso exista no arquivo/
                mostradados();
                gotoxy(1,22);
                if(CLIENTE.EXCLUIDO!=1)
                    printf("Este registro ja existe    ");
                else
                    printf("Este registro foi excluido    ");
                gotoxy(1,23);
                printf("Tecle <Enter> para nova tentativa   ");
                fflush(stdin);
                while( ( TECLA = getchar() ) != '\n' )
                    gotoxy(33,23);
                gotoxy(1,22);
                clearline();
            }
            else
            {
                //Localiza posicao para gravar registro/
                //Grava registro/
                gotoxy(18,11);
                fgets(CLIENTE.NOME,31,stdin);  // não precisa do fflush pois o fgets tem esse comando incluido nele
                gotoxy(18,12);
                fgets(CLIENTE.ENDERECO,100,stdin);
                gotoxy(18,13);
                fflush(stdin);scanf("%d",&CLIENTE.CEP);
                gotoxy(18,14);
                fflush(stdin);scanf("%d",&CLIENTE.TELEFONE);
                gotoxy(18,15);
                fflush(stdin);fgets(CLIENTE.EMAIL,60,stdin);
                CLIENTE.CODIGO=NR_CLI;
                CLIENTE.EXCLUIDO = 0;
                gotoxy(1,23);
                printf("Tecle <Enter> para nova tentativa   ");
                fflush(stdin);
                while((TECLA = getchar())!='\n')
                    gotoxy(33,23);
            }
        }
    }while( NR_CLI != 0 );
    return 0;
}

//CadastroFuncionario*******************************

int cadastrafun()
{
    clrscr();
    line();
    center(2,SISTEMA4);
    center(1,"MÓDULO DE CADASTRAMENTO \n");
    center(3,"Digite os dados abaixo \n");
    line();

    do{
       gotoxy(1,22);//clearline()
       gotoxy(1,23);//clearline()
       printf("Digite[0] para voltar ao menu                     ");
       tela();
       gotoxy(18,10);fflush(stdin);
       scanf("%d",&NR_CLI);
       gotoxy(1,23);//clearline();
       if(NR_CLI!=0){
          if(pesquisa(NR_CLI)==1)
          {
             //Apresenta os dados caso exista no arquivo/
             mostradados();
             gotoxy(1,22);
             if(CLIENTE.EXCLUIDO!=1)printf("Este registro ja existe    ");
             else printf("Este registro foi excluido    ");
             gotoxy(1,23);
             printf("Tecle <Enter> para nova tentativa   ");
             fflush(stdin);
             while((TECLA=getchar())!='\n')
             gotoxy(33,23);
             gotoxy(1,22);clearline();
          }
          else{
             //Localiza posicao para gravar registro/

             //Grava registro/
             gotoxy(18,11);
             fflush(stdin);fgets(CLIENTE.NOME,31,stdin);
             gotoxy(18,12);
             fflush(stdin);fgets(CLIENTE.ENDERECO,100,stdin);
             gotoxy(18,13);
             fflush(stdin);scanf("%d",&CLIENTE.CEP);
             gotoxy(18,14);
             fflush(stdin);scanf("%d",&CLIENTE.TELEFONE);
             gotoxy(18,15);
             fflush(stdin);fgets(CLIENTE.EMAIL,60,stdin);
             CLIENTE.CODIGO=NR_CLI;
             CLIENTE.EXCLUIDO = 0;

             gotoxy(1,23);
             printf("Tecle <Enter> para nova tentativa   ");
             fflush(stdin);
             while((TECLA = getchar())!='\n')
                gotoxy(33,23);
          }
       }
    }while(NR_CLI != 0);

    return 0;
}
//Agendar//
int agendar()
{
    clrscr();
    center(3,"AGENDAMENTO\n");
    getchar();
}
/**********/
//Informação//
int info (void)
{
    clrscr();
    line();
    center(3,"INFORMAÇÕES DO SISTEMA\n");
    textcolor_2(9,15);
    printf("SISTEMAS PARA CLINICAS \n\n\n");
    getchar();
    return 0;
}
//Consulta dos dados/
int consultar(void)
{
    clrscr();
    line();center(1,"MÓDULO DE CONSULTA\n");
    center(3,"Digite o número do codigo:\n");
    line();
    do{
        gotoxy(1,22);//clearline();
        gotoxy(1,23);//clearline();
        printf("Digite [0] para voltar ao menu                                   ");
        tela();
        gotoxy(18,10);fflush(stdin);scanf("%d",&NR_CLI);
        gotoxy(1,23);//clearline();
        if(NR_CLI != 0)
        {
            I=pesquisa(NR_CLI);
            if(I==1&&CLIENTE.EXCLUIDO==0)
            {
                //Apresenta os dados caso exista no arquivo/
                mostradados();
                alterar:
                    gotoxy(1,23);clearline();gotoxy(1,23);
                    if(ESCOLHA==0)
                    {
                        printf("Deseja editar esse registro(S/N)?");fflush(stdin);fgets(OPT,2,stdin);
                        if     (strcmp(OPT,"n")==0||strcmp(OPT,"N")==0){}
                        else if(strcmp(OPT,"s")==0||strcmp(OPT,"S")==0)
                        {
                            editar();
                        }
                        else
                        {
                            gotoxy(1,23);
                            clearline();
                            gotoxy(1,23);
                            printf("Digite S ou N! Pressione <Enter> para continuar...   ");
                            while((TECLA=getchar())!='\n')
                                gotoxy(33,23);
                            goto alterar;
                        }
                    }
                    else
                    {
                        printf("Deseja excluir esse registro(S/N)?");
                        fgets(OPT,2,stdin);
                        if     (strcmp(OPT,"n")==0||strcmp(OPT,"N")==0){}
                        else if(strcmp(OPT,"s")==0||strcmp(OPT,"S")==0)
                        {
                            gotoxy(1,23);
                            clearline();
                            gotoxy(1,23);
                            exclusao(NR_CLI);
                        }
                        else
                        {
                            gotoxy(1,23);
                            clearline();
                            gotoxy(1,23);
                            printf("Digite S ou N! Pressione <Enter> para continuar...   ");
                            while((TECLA=getchar())!='\n')
                                gotoxy(33,23);
                            goto alterar;
                        }
                    }
                    gotoxy(1,23);
                    printf("Tecle <Enter> para nova tentativa                    ");
                    fflush(stdin);
                    while((TECLA=getchar())!='\n')
                        gotoxy(33,23);
            }
            else
            {
                gotoxy(1,22);
                if(CLIENTE.EXCLUIDO!=1)
                    printf("Este registro nao esta cadastrado                   ");
                else
                {
                    printf("Este registro esta excluido                         ");
                    mostradados();
                }
                gotoxy(1,23);
                printf("Tecle <Enter> para nova tentativa                   ");
                fflush(stdin);
                while((TECLA=getchar())!='\n')
                    gotoxy(33,23);
                gotoxy(1,22);
                printf("                                    ");
            }
       }
    }while( NR_CLI != 0 );
    return 0;
}
/*********/
//Edição de dados/
int editar(void){
   //Alterações e miscelenia/
   char OPCAO;
   int achou=2;
   do{
      gotoxy(1,23);printf("[1]Nome|[2]Endereco|[3]CEP|[4]Telefone|[5]Email|[6]Confirma|[7]Abandona:");
      fflush(stdin);OPCAO=getchar();
      switch(OPCAO){
         case '1':
              gotoxy(18,11);printf("                                           ");gotoxy(18,11);
              fflush(stdin);fgets(CLIENTE.NOME,31,stdin);
              break;
         case '2':
              gotoxy(18,12);printf("                                                     ");gotoxy(18,12);
              fflush(stdin);fgets(CLIENTE.ENDERECO,100,stdin);
              break;
         case '3':
              gotoxy(18,13);printf("                                           ");gotoxy(18,13);
              fflush(stdin);scanf("%d",&CLIENTE.CEP);
              break;
         case '4':
              gotoxy(18,14);printf("                                           ");gotoxy(18,14);
              fflush(stdin);scanf("%d",&CLIENTE.TELEFONE);
              break;
         case '5':
              gotoxy(18,15);printf("                                           ");gotoxy(18,15);
              fflush(stdin);fgets(CLIENTE.EMAIL,60,stdin);
              break;
         case '6':
              Confirma:
              gotoxy(1,23);clearline();gotoxy(1,23);
              printf("Confirma a edicao desse registro(S/N)?");fflush(stdin);fgets(OPT,2,stdin);
              if(strcmp(OPT,"n")==0||strcmp(OPT,"N")==0){}
              else if(strcmp(OPT,"s")==0||strcmp(OPT,"S")==0){
                 achou=0;
              }
              else{
                 gotoxy(1,23);
                 printf("Digite S ou N! Pressione <Enter> para continuar...       ");
                 while((TECLA=getchar())!='\n')
                   gotoxy(33,23);
                 goto Confirma;
              }
              break;
         case '7':
              Cancela:
              gotoxy(1,23);clearline();gotoxy(1,23);
              printf("Abandona a edicao desse registro(S/N)?");fflush(stdin);fgets(OPT,2,stdin);
              if(strcmp(OPT,"n")==0||strcmp(OPT,"N")==0){}
              else if(strcmp(OPT,"s")==0||strcmp(OPT,"S")==0){
                 achou=1;
              }
              else{
                 gotoxy(1,23);clearline();gotoxy(1,23);
                 printf("Digite S ou N! Pressione <Enter> para continuar...      ");
                 while((TECLA=getchar())!='\n')
                   gotoxy(33,23);
                 goto Cancela;
              }
              break;
      }
      gotoxy(71,23);printf("         ");
   }while(achou!=0&&achou!=1);
   gotoxy(1,23);
   if(achou==0){


      printf("Sucesso na alteracao do registro! Pressione <Enter> para prosseguir   ");
   }
   else
   {
      printf("Registro alterado! Pressione <Enter> para prosseguir   ");
   }
   fflush(stdin);
   while((TECLA = getchar())!='\n')
      gotoxy(33,23);
   gotoxy(1,23);clearline();
   return 0;
}

 

  • Amei 1
Link para o comentário
Compartilhar em outros sites

9 minutos atrás, L3ozao disse:

@devair1010 @arfneto  poxa vida, muito obrigado pelas dicas e ajuda.

Então eu posso retirar todos os "(void)" do meu código? só deixar nos dados...

 

 

Não. É boa prática deixar (void) nas declarações. No mínimo garante a quem está lendo e ao compilador que o protótipo era esse mesmo.

 

Seu programa tem problemas muito maiores, como as coisas que eu listei. Veja essa função por exemplo:
 

void mostradados(void)
{
     gotoxy(18,10);printf("%d",NR_CLI);
     gotoxy(18,11);printf("%s",CLIENTE.NOME);
     gotoxy(18,12);printf("%s",CLIENTE.ENDERECO);
     gotoxy(18,13);printf("%d",CLIENTE.CEP);
     gotoxy(18,14);printf("%d",CLIENTE.TELEFONE);
     gotoxy(18,15);printf("%s",CLIENTE.EMAIL);
     return;
}

 

Isso é um pesadelo. Para você. Eis o que está errado:

  • De onde vem CLIENTE? Se você mudar essa m. vai mudar no programa inteiro. E se foi sem querer? Num instante isso zoa todo o seu programa
  • Serio que chamou 12 funções só nesse bloco? Uma para posicionar o cursor e outra para mostrar o texto?
  • Se mudar a origem, mudar o formato ou mudar a posição está tudo misturado. NUNCA faça isso. Gera programas impossíveis de manter e mudar.
  • nunca retorne void. E entenda que uma função
     
         void f(void);

     

Apenas a título de exemplo, não estou recomendando isso, mas veja essa diferença para o mesmo código:
 

  • int    mostradados(const COORD origem, CLIENTE* c)
    {
      char linha = origem.Y;
      char coluna = origem.X;
      gotoYX(linha,coluna); printf("%d",C->NOME);      linha += 1;
      gotoYX(linha,coluna); printf("%d",C->ENDERECO);  linha += 1;
      gotoYX(linha,coluna); printf("%d",C->CEP);       linha += 1;
      gotoYX(linha,coluna); printf("%d",C->TELEFONE);  linha += 1;
      return 0;
    }

 

gotoxy()

 

Não entendo isso que sempre vejo aqui nesse forum: a menos que se tenha formação matemática e programe em FORTRAN desde os '70, o normal é se ter a noção de cursor em termos de linha e coluna e não em (x,y) como no plano cartesiano, coluna e linha. Então porque, já que vocês copiam para todo o sempre essa função
 

void gotoxy(int x, int y)
{
     COORD coord;
     coord.X=(short)x;
     coord.Y=(short)y;
     SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);
}

 

Porque d1@b0 de razão não escrevem afinal

 

gotoYX(linha,coluna)? O código está no programa. Custa muito inverter?
 

void gotoYX(int y, int x)
{
     COORD coord;
     coord.X=(short)x;
     coord.Y=(short)y;
     SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);
}

 

Isso vem desde o turtle graphics do Apple II nos anos 80, uma biblioteca de desenho para crianças ;) 

 

 

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Vou ser sincero minha professora passou esse código e eu estou trabalhando em cima dele, nesta parte do gotoxy eu não entendi muito bem 😕

 Então não é ideal eu usar desta forma? como eu deveria construir 

Em 17/11/2020 às 21:28, arfneto disse:

void mostradados(void) { gotoxy(18,10);printf("%d",NR_CLI); gotoxy(18,11);printf("%s",CLIENTE.NOME); gotoxy(18,12);printf("%s",CLIENTE.ENDERECO); gotoxy(18,13);printf("%d",CLIENTE.CEP); gotoxy(18,14);printf("%d",CLIENTE.TELEFONE); gotoxy(18,15);printf("%s",CLIENTE.EMAIL); return; }

e nessa parte também nao entendi muito bem!

Em 17/11/2020 às 21:28, arfneto disse:

gotoYX(linha,coluna)? O código está no programa. Custa muito inverter?

 Desculpe pela ignorância sou bem leigo no assuntou comecei o curso a pouco tempo to tentando fazer o melhor possivel

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

26 minutos atrás, L3ozao disse:

Vou ser sincero minha professora passou esse código e eu estou trabalhando em cima dele, nesta parte do gotoxy eu não entendi muito bem 😕

 Então não é ideal eu usar desta forma? como eu deveria construir 

 

Talvez eu não tenha sido claro no tópico anterior, mas eis o que eu disse, no tópico #5:

 

Você escreveu isso: 
 

void mostradados(void)
{
     gotoxy(18,10);printf("%d",NR_CLI);
     gotoxy(18,11);printf("%s",CLIENTE.NOME);
     gotoxy(18,12);printf("%s",CLIENTE.ENDERECO);
     gotoxy(18,13);printf("%d",CLIENTE.CEP);
     gotoxy(18,14);printf("%d",CLIENTE.TELEFONE);
     gotoxy(18,15);printf("%s",CLIENTE.EMAIL);
     return;
}

 

E eu escrevi:

 

Isso é um pesadelo. Para você. Eis o que está errado:

  • De onde vem CLIENTE? Se você mudar essa m. vai mudar no programa inteiro. E se foi sem querer? Num instante isso zoa todo o seu programa
  • Serio que chamou 12 funções só nesse bloco? Uma para posicionar o cursor e outra para mostrar o texto?
  • Se mudar a origem, mudar o formato ou mudar a posição está tudo misturado. NUNCA faça isso. Gera programas impossíveis de manter e mudar.

E então eu te mostrei:
 

int    mostradados(const COORD origem, CLIENTE* c)
{
  char linha = origem.Y;
  char coluna = origem.X;
  gotoYX(linha,coluna); printf("%d",C->NOME);      linha += 1;
  gotoYX(linha,coluna); printf("%d",C->ENDERECO);  linha += 1;
  gotoYX(linha,coluna); printf("%d",C->CEP);       linha += 1;
  gotoYX(linha,coluna); printf("%d",C->TELEFONE);  linha += 1;
  return 0;
}

 

E acrescentei:

 

Citação

Apenas a título de exemplo, não estou recomendando isso, mas veja essa diferença para o mesmo código:


E por que?

 

  • Porque continua muito misturado o acesso ao s dados, a posição e a impressão. Mas com a função escrita como eu mostrei você pode usar a função com vários CLIENTE, porque ela recebe apenas um ponteiro para a estrutura
  • você passa a origem uma vez só, então pode mudar só um lugar para escrever em outro ponto da tela. Entenda por exemplo que na versão que escreveu se quer mudar a posição do menu você tem que mudar em todo lugar, e os valores lá são CONSTANTES, linha e coluna.

Exemplo: o que é CLIENTE?
 

É
 

        struct REG_CLI CLIENTE;

 

E REG_CLI é o que?
 

 struct REG_CLI{
   int CODIGO;
   char NOME[31];
   char ENDERECO[100];
   int CEP;
   int TELEFONE;
   char EMAIL[60];
   int EXCLUIDO;
};
struct REG_CLI CLIENTE;


Pois é: CLIENTE é uma variável. Só uma variável. Sua função só opera com uma variável. Não faz sentido. Ela não tem parâmetros e não retorna nada. Para tratar outro cliente tem que escrever outra função. Um buraco negro. E ela opera com uma variável global. Pode zoar qualquer coisa fora dela. É muito difícil de controlar... Nunca use isso:
 

        void mostradados(void)


Só vai comprometer sua nota ou seu emprego ou seu contrato.

 

Exemplo: alterando esse código, de novo:

 

#include <stdio.h>
#include <windows.h>

#define _MAX_CLI_ 20
typedef struct
{
	int		id;

	char	CEP[10];
	char	EMAIL[60];
	char	ENDERECO[100];
	char	NOME[31];
	char	TELEFONE[25];

}    Cliente;

typedef struct
{
	int		tamanho;
	Cliente cli[_MAX_CLI_];

}	Cadastro;

int		gotoYX(char linha, char coluna);
int		mostra_dado(char, char, Cliente*);

 

Só usando recortar e colar do seu programa.

 

Note:

  • CEP int não é boa ideia. Em geral vai sempre usar como string.
  • Telefone int é bem ruim. Existe uma norma internacional de telefonia e o formato é bem conhecido há décadas. E só dá trabalho pra formatar.
  • O que importa no seu programa é o Cadastro e não o cliente
     
  • Se o cadastro já tiver DENTRO uma variável com quantos caras tem dentro é bem conveniente. E é bem ingênuo se ele não tiver e você tiver que ter um
     
            int cont_cli;
    para seu cadastro ;) como todo mundo
  • Nada global. E declare as funções antes. 
  • main() deve ser sempre a primeira. Se possível em um arquivo separado

 

Um programa de exemplo usando isso
 

É um exemplo não funcional. Só para você entender como isso funciona na prática:

 

O programa declara alguns cadastros e usa mostra_dado() para mostrar os clientes. Todos tem o mesmo conteúdo porque eu só quero mostrar a ideia e estou sem tempo.

Do programa:

 

 

    Cadastro  cad;
    Cadastro  outra_loja;
    Cadastro  rede[5];

    cad.tamanho = 0;
    outra_loja.tamanho = 0;

 

Veja como declarar dois cadastros simples e uma rede com 5 lojas: cada cadastro tem uma variável tamanho que diz quantos elementos tem dentro.
 

Veja como iniciar a rede de 5 lojas
 

    // exemplo: zera todos os cadastros da rede
    int tam_rede = sizeof(rede) / sizeof(Cadastro);
    for (int i = 0; i < tam_rede; i += 1)
        rede[i].tamanho = 0;

 

Entenda que assim pode calcular quantos cadastros tem no vetor sem usar uma constante. Compare com sua função que só atende um CIiente e escreve só na coluna 18

 

E na hora de mostrar algum cliente pode usar sempre a mesma função. Veja a saída do programa
 


     Johnny Cash
     Rua Um 1 - Cidade Grande - XY
     CEP 01234-567
     Fone: +39 (23) 1234-5678


          Johnny Cash
          Rua Um 1 - Cidade Grande - XY
          CEP 01234-567
          Fone: +39 (23) 1234-5678


              Johnny Cash
              Rua Um 1 - Cidade Grande - XY
              CEP 01234-567
              Fone: +39 (23) 1234-5678


                  Johnny Cash
                  Rua Um 1 - Cidade Grande - XY
                  CEP 01234-567
                  Fone: +39 (23) 1234-5678


                      Johnny Cash
                      Rua Um 1 - Cidade Grande - XY
                      CEP 01234-567
                      Fone: +39 (23) 1234-5678


                          Johnny Cash
                          Rua Um 1 - Cidade Grande - XY
                          CEP 01234-567
                          Fone: +39 (23) 1234-5678

 

Rode o programa e espero que entenda melhor o que estou explicando:

Spoiler

#include <stdio.h>
#include <windows.h>

#define _MAX_CLI_ 20
typedef struct
{
	int		id;

	char	CEP[10];
	char	EMAIL[60];
	char	ENDERECO[100];
	char	NOME[31];
	char	TELEFONE[25];

}    Cliente;

typedef struct
{
	int		tamanho;
	Cliente cli[_MAX_CLI_];

}	Cadastro;

int		gotoYX(char linha, char coluna);
int		mostra_dado(char, char, Cliente*);

int main(void)
{
    Cadastro  cad;
    Cadastro  outra_loja;
    Cadastro  rede[5];

    cad.tamanho = 0;
    outra_loja.tamanho = 0;
    // exemplo: zera todos os cadastros da rede
    int tam_rede = sizeof(rede) / sizeof(Cadastro);
    for (int i = 0; i < tam_rede; i += 1)
        rede[i].tamanho = 0;

    // um cliente de exemplo
    Cliente C = {
        .id = 1,
        .CEP = "01234-567",
        .EMAIL = "[email protected]",
        .ENDERECO = "Rua Um 1 - Cidade Grande - XY",
        .NOME = "Johnny Cash",
        .TELEFONE = "+39 (23) 1234-5678"
    };

    // coloca esse cliente no cadastro 'cad'
    cad.cli[0] = C;
    cad.tamanho = 1;

    // enche todos os registros de "rede" com
    // esse cliente em todas as lojas
    for (int loja = 0; loja < tam_rede; loja += 1)
    {
        // cada loja tem um cadastro
        for (int c = 0; c < _MAX_CLI_; c += 1)
        {
            rede[loja].cli[c] = C; // copia o mesmo
            rede[loja].tamanho += 1; // conta o cara
        };  // for()
    };  // for()

    // mostra o primeiro cliente
    mostra_dado(1, 5, &cad.cli[0]);

    // mostra o ultimo cliente de cada loja da rede
    for( int i=0;i<tam_rede;i+=1)
        mostra_dado(
            (6*i + 7), // linha
            (4*i + 10), // coluna
            &rede[4].cli[_MAX_CLI_ - 1] // cliente
        );

    return 0;
};


int gotoYX(char y, char x)
{
    COORD coord;
    coord.X = (short)x;
    coord.Y = (short)y;
    return SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}


int		mostra_dado(char linha, char coluna, Cliente* cli)
{
    gotoYX(linha, coluna); printf("%s", cli->NOME);      linha += 1;
    gotoYX(linha, coluna); printf("%s", cli->ENDERECO);  linha += 1;
    gotoYX(linha, coluna); printf("CEP %s", cli->CEP);       linha += 1;
    gotoYX(linha, coluna); printf("Fone: %s", cli->TELEFONE);  linha += 1;
    return 0;
}

 

 

1 hora atrás, L3ozao disse:

e nessa parte também nao entendi muito bem!

Em 17/11/2020 às 21:28, arfneto disse:

gotoYX(linha,coluna)? O código está no programa. Custa muito inverter?

 Desculpe pela ignorância sou bem leigo no assuntou comecei o curso a pouco tempo to tentando fazer o melhor possivel

 

O lance de gotoxy() é que exceto para o cara que tenha formação matemática apenas, você sempre espera colocar o cursor em uma certa linha e coluna. E vejo aqui nesse forum todo mundo copiando essa função gotoxy() que tem 4 linhas. Ela é derivada de um trem chamado turtle graphics, uma biblioteca de desenho para crianças dos anos 80, que rodava no apple II, antes até do IBM PC, DOS, Windows. Anos depois a Borland incluiu função com esse nome no compilador Turbo Pascal, antes do C. E isso veio até hoje :D 

 

Acontece que se você tem o código na sua frente por que razão não muda essa m. para passar a LINHA e a COLUNA nessa ordem? 

 

Por isso mostrei uma gotoYX(). Entendeu?

 

1 hora atrás, L3ozao disse:

Vou ser sincero minha professora passou esse código e eu estou trabalhando em cima dele, nesta parte do gotoxy eu não entendi muito bem 😕

 Então não é ideal eu usar desta forma? como eu deveria construir

 

Às vezes o professor passa um código ruim de propósito para testar até onde o pessoal vai com ele. Às vezes o professor é ruim mesmo.

 

Sugiro mesmo tentar mudar tudo que eu apontei em seu programa. Vai terminar mais depressa esse e os próximos programas. Seu programa como escreveu está frágil, monolítico e com muitos erros ainda.

 

Continue escrevendo. Rode os exemplos que recebeu.

 

  • Curtir 1
  • Amei 1
Link para o comentário
Compartilhar em outros sites

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!