Ir ao conteúdo
  • Cadastre-se

C preciso de um limpa buffer no meu codigo de cadastro.


joicenathalice

Posts recomendados

joice

Preciso melhor esse código de cadastro, preciso de um limpa buffer o meu não funciona, e de fazer alterações  de cadastro no arquivo.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>


/*   escrever  */
//declarando a struct de  cliente
struct Clientes{
    char telefone[15];        
    char nome[50];
    char endereco[100];
    int ativo; // na hora de excluir vou dizer se esta ativo sim ou nao
}m_clientes[200];


void cliente();
void cadastrar();
void buscar();
void limparbuffer();


int main(int argc, char** argv) {

 cliente();
 limparbuffer();
 
system ("pause");
    return 0;
}
void cliente() {


    int opcao;
    do{
    system ("cls");
    printf("\n--------------------------PIZZARIA 6 AMIGOS ----------------------------------------------\n");
    printf("\n-----------------------------Tela Cliente ----------------------------------------------- \n");
    printf("\n__________________________________________________________________________________________\n");
    printf("\n 1-Cadastrar cliente");
    printf("\n 2-Buscar cliente");
    printf("\n 3-Excluir cliente");
    printf("\n 0-sair\n");

    scanf("%d",&opcao);
    getchar();
    switch(opcao){
        case 1: cadastrar(); break;
        case 2: buscar(); break;
        
    }
    
    }while(opcao!=0);
}
void cadastrar() {
    
    FILE*arq;
    m_clientes[200];
    arq = fopen("arquivocliente.bin", "ab+");

    char telefone[15];        
    char nome[50];
    char endereco[100];    
    int opcao;
    int i=0;
    

    do{
        system("cls");
        
        printf("\n--------------------CADASTRO DE CLIENTES-------------------\n");

           printf("\nDigite o telefone com (DDD): ");
           fgets(m_clientes.telefone,15,stdin);
           fprintf(arq, m_clientes.telefone);
           limparbuffer();
          
           printf("\nDigite o nome do cliente: ");
           fgets(m_clientes.nome,50,stdin);
           fprintf(arq, m_clientes.nome);
           
    
           limparbuffer();
           printf("\nDigite o endereço com n da residencia: ");
           fgets(m_clientes.endereco,100,stdin);
           fprintf(arq, m_clientes.endereco);
         limparbuffer();
           
           
          
           
    for ( int i = 0; i < sizeof(m_clientes)/sizeof(struct Clientes); i++ )
          {
    if (m_clientes.ativo==0)
              {
                  strcpy(m_clientes.telefone,telefone);
                  strcpy(m_clientes.nome,nome);
                  strcpy(m_clientes.endereco,endereco);
                  break;
              }
          }
          
    limparbuffer();
    printf("Cadastro efetuado com sucesso!\n\n");
    printf("\n----------------------------------------------------------\n");
    printf("\n 1-Continuar\n 0-Sair\n");
    scanf("%d",&opcao);
        

    }while(opcao!=0);
    

    fclose(arq);
    }

void buscar(){
    char telefone[50];
    int opcao;
    int i;
            
    FILE*arq;
     arq = fopen("arquivocliente.bin", "rb");
    if(!arq)
{
    printf("ocorreu um erro ao acessar o arquivo\n");
    exit (1);
    
}
do
{
    system("cls");
        printf("\n\n___________________Busca de Cliente________________________\n");
        printf("\nDigite o telefone: ");
        fgets(m_clientes.telefone,15,stdin);
        
        getchar();
        fread(&m_clientes, sizeof(Clientes), 1, arq);
        
    while ( i < sizeof(m_clientes)/sizeof(struct Clientes) )
    {
        if(strcmp(m_clientes.telefone,telefone)!=NULL)
        {
    
             printf("\nBem vindo sr(a)");
             printf("\nNome: %s\nTelefone: %s\nEndereco: %s",m_clientes.nome,m_clientes.telefone,m_clientes.endereco);
             void limparbuffer(char *string, int pos);
            getchar();
               printf("\n--------------------------------------------------------\n");
               break;
        }
        else
        {
        printf("\nCliente Nao Encontrado");
        }

    }
    getchar();
    printf("\n 1-Nova busca \n 0-Sair\n");
    scanf("%d",&opcao);
    
    }while(opcao!=0);
    
    fclose(arq);
    system("pause");
    }
void limparbuffer(char *string, int pos)
{
    //Fgets que limpa o buffer
    char ch;
    fgets(string, pos, stdin);
    strtok(string, "\n");

    if (strlen(string) == pos - 1)
        while ((ch = getchar()) != '\n' && ch != EOF);
}


// preciso carregar o que esta no arquivo e jogar em matriz para que meu sistema leia.}

 

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

@joicenathalice    para postar seu código é melhor usar o botão      <>   

1193061210_barradeferramentas.JPG.d6450dc172121871d4fdd4c9f923a1e2.JPG

que está desenhado lá na barra de ferramentas da janela de postar , pois senão seu código fica faltando alguns caracteres como os  [ i ]  , que sumiram do seu código ,  e seu código está bom , mas se é arquivo binário então o fprintf não é uma boa escolha , melhor seria o fwrite que grava todos os dados daquela posição do vetor de uma vez , e também ,  trabalhar com arquivos é bem difícil , então seria melhor no início pegar os dados que estão no arquivo binário e coloca-los na struct , e durante o uso do programa vai inserindo ou listando ou removendo os dados na struct , e no final grava tudo novamente , e então seu código com algumas modificações  poderia se assim  :

#include <stdio.h>
#include <conio.h>
#include <ctype.h>
#include <stdlib.h>
#include <locale.h>
#include <math.h>
#include <windows.h>
#include <string.h>
#define  tam 20
#define  cls system("cls");
#define  pausar(g) for(f=0;f<g*200000;f++);
#define  u GetStdHandle(STD_OUTPUT_HANDLE)
#define gotoxy_2(x,y) {COORD c={x,y};SetConsoleCursorPosition(u,c);}
#define textcolor_2(l,f) SetConsoleTextAttribute(u,l+(f<<4));
/*
    0 preto 1 azul 2 verde 3 az desbotado 4 vermelho 5 magenta
    6 marrom 7 cinza claro 8 cinza escuro 9 az claro 10 verde claro
    11 az celeste 12 vermelho claro 13 lilás 14 amarelo 15 branco
*/
int f,i,j,w,cont,flag;
int mov[5]={0,21,63,3,18};
FILE *arq;
/*   escrever  */
//declarando a struct de  cliente
struct   Clientes     {
    char telefone[ 15];
    char nome[     50];
    char endereco[100];
    int  ativo        ; // na hora de excluir vou dizer se esta ativo sim ou nao
}m_clientes[200      ];
void cliente(        );
void cadastrar(      );
void buscar(         );
void limparbuffer(   );
void init_graph(     );
void listar(         );
void remover(        );
void alterar(        );
void menu(           );
void esperar(        );
void movement(       );
int main(int argc, char** argv){
    init_graph( );/* pega os dados do arquivo e coloca na struct */
    int opcao;
    do{
        menu();
        do{
            movement();/* uma animação        */
            Sleep(100);/* dorme hum pouquinho */
        }while( ! kbhit() );
        opcao = getch()-48;/* sem enter ou scanf("%d",&esc); com enter      */
        cls   ;/* opcao contém o cód ASCII da tecla pressionada menos 48    */
        switch(opcao){/* então cód ASCII de zero é 48 menos 48 igual a zero */
        case 1:
            cadastrar();
            break;
        case 2:
            listar();
            break;
        case 3:
            remover();/* melhor remover na struct e no final grava tudo */
            break;
        case 4:
            alterar();
            break;
        case 0:
            gotoxy_2(0,9);
            printf("Saindo Do Programa !\n");
            //escrevendo no arquivo
            arq = fopen("arquivocliente.bin","wb");        /* cria e abre o arquivo vazio para gravação */
            for(j=0;j<cont;j++){                           /* quantidade de posições no vetor de struct */
                fwrite(&m_clientes[j],sizeof(struct Clientes),1,arq);/* grava no arquivo cada bloco da struct     */
            }
            //fechando arquivo
            fclose(arq);
            esperar();
            textcolor_2(10,12);
            exit(0);
        }
    }while( opcao != 0 );
    return 0;
}
void cadastrar(){
    char op;
    do{
        cls                                                  ;
        textcolor_2(14,12                                   );
        printf("\n------------------- CADASTRO DE CLIENTES ------------------\n\n");
        textcolor_2(10,0                                    );
        printf("Digite o telefone com (DDD): "              );
        fflush(stdin                                        );
        fgets(m_clientes[cont].telefone,15,stdin            );
        fflush(stdin                                        );
        printf("Digite o nome do cliente: "                 );
        fgets(m_clientes[cont].nome,50,stdin                );
        printf("Digite o endereço com n da residencia: "    );
        fflush(stdin                                        );
        fgets(m_clientes[cont].endereco,100,stdin           );
        m_clientes[cont].ativo=1                             ;
        cont++                                               ;
        printf("Quer Cadastrar Outro S/N "                  );
        op = (char)getch(                                   );
        printf("\n"                                         );
    }while( toupper(op) != 'N'                              );
}
void init_graph(){
    arq = fopen("arquivocliente.bin","rb");       /* abre arquivo binário para leitura                      */
    if(arq == NULL)       return ;                /* se o arquivo não existir retorna para o menu           */
    while(fread(&m_clientes[cont],sizeof(struct Clientes),1,arq)==1 )/* essa parte quer dizer que enquanto ele estiver retor-  */
        cont++;                                   /* nando 1 significa que tem coisas pra ler e vai pegando */
                                                  /* e colocando na struct e inc o cont de pos da struct    */
    fclose(arq);                                  /* fechando arquivo de leitura                            */
}
void listar(                                    ){
    if( ! cont                                  ){
        printf("Ainda Nao Tem Nada Cadastrado\n");
        printf("\n       Tecle !"               );
        getch();
        return ;
    }
    w=2                                          ;
    for(j=0;j<cont;j++                          ){/* cont é o total de cadastros */
        textcolor_2(12,15                       );
        printf("  %d%c Cadastro    \n",j+1,167  );
        textcolor_2(10,0                        );
        printf("Nome ------: %s"  ,m_clientes[j].nome             );
        printf("Telefone --: %s"  ,m_clientes[j].telefone         );
        printf("Endereco --: %s\n",m_clientes[j].endereco         );
        if( j == w                                                ){/* a cada três cadastros espera */
            printf(" aqui  Tecle !\r"                             );
            w+=3                                                   ;
            getch(                                                );
        }
    }
    printf("Terminou De Listar,    Tecle !"                       );
    esperar();
}
void remover(                                                     ){
    char nom[20                                                   ];
    printf("Qual nome deseja excluir: "                           );
    fgets(nom,50,stdin                                            );
    cls                                                            ;
    flag=0                                                         ;
    for(j=0;j<cont;j++                                            ){/* cont é o total de cadastros */
        if(strcmp(m_clientes[j].nome,nom) == 0                    ){
            for(w=j;w<cont;w++                                    ){
                m_clientes[w] = m_clientes[w+1];/* pega conteúdo da posição da frente e coloca em cima dessa posição */
            }
            printf("Excluiu O Cadastro De %s Com Sucesso . . . !\n",
                   nom                                            );
            flag = 1                                               ;
            cont--;           /* decrementa uma unidade pois terá hum cadastro a menos      */
            break;            /* removeu , sai desse looo for                               */
        }
    }
    if( ! flag                               )
        printf("Cadastro Nao Encontrado !\n");
    printf("    Tecle !"                    );
    getch(                                  );
}
void alterar(                               ){
    //alterar atraves do nome do paciente
    char pessoa[31                          ];
    printf("Nome do paciente para alterar: ");
    fflush(stdin                            );
    fgets(pessoa,50,stdin                   );
    cls                                      ;
    flag=0;
    for(j=0;j<cont;j++                      ){/* cont é o total de cadastros */
        if(strcmp(pessoa,m_clientes[j].nome) == 0                ){
            printf("insira novos dados\n"                        );
            printf("Digite o telefone com (DDD): "               );
            fflush(stdin                                         );
            fgets(m_clientes[cont].telefone,15,stdin             );
            fflush(stdin                                         );
            printf("Digite o nome do cliente: "                  );
            fgets(m_clientes[cont].nome,50,stdin                 );
            printf("Digite o endereço com n da residencia: "     );
            fflush(stdin                                         );
            fgets(m_clientes[cont].endereco,100,stdin            );
            m_clientes[cont].ativo=1                              ;
            printf("\n\n\t*** Dados Alterado com Sucesso ***\n\n");
            printf("Alterou O Nome %s Para %s\n",pessoa,m_clientes[j].nome);
            flag=1;
            break                                                 ;/* alterou ; sai do loop for */
        }
    }
    if( ! flag                                 )
        printf("Cadastro Nao Encontrado !\n"  );
    printf("    Tecle !"                      );
    getch(                                    );
}
void menu(                                    ){
    cls                                        ;
    int lin=2                                  ;
    textcolor_2(11,0                          );
    gotoxy_2(28, 4);printf("*** PIZZARIA 6 AMIGOS ***",      );
    gotoxy_2(28, 5);printf("      tela  cliente      "       );
    gotoxy_2(28, 6);printf("_________________________"       );
    gotoxy_2(28, 8);printf(" 1 - Cadastrar cliente \n"       );
    gotoxy_2(28, 9);printf(" 2 - Buscar cliente    \n"       );
    gotoxy_2(28,10);printf(" 3 - Excluir cliente   \n"       );
    gotoxy_2(28,11);printf(" 4 - ALTERAR             "       );
    gotoxy_2(28,12);printf(" 0 - sair                "       );
    gotoxy_2(28,14);printf("  Escolha uma op%c%co : ",135,198);
    textcolor_2(14,0          );
    for(j=20;j<60;j++         ){
        gotoxy_2(j,lin        );
        printf("%c",205       );
        gotoxy_2(j,lin+14     );
        printf("%c",205       );
        if(j<35               ){
            gotoxy_2(20  ,j-18);
            printf("%c",186   );
            gotoxy_2(60  ,j-18);
            printf("%c",186   );
        }
    }
    gotoxy_2(20,2             );
    printf("%c",201           );
    gotoxy_2(60,2             );
    printf("%c",187           );
    gotoxy_2(20,16            );
    printf("%c",200           );
    gotoxy_2(60,16            );
    printf("%c",188           );
    gotoxy_2(54,14            );
    textcolor_2(10,0          );
}
void esperar(                 ){
    textcolor_2(15,0          );
    printf("\n     Tecle !\n\n       ");
    while( ! kbhit()                  ){
        printf("|\b"    );pausar(300  );
        printf("/\b"    );pausar(300  );
        if(kbhit()      ) break        ;
        printf("-\b"    );pausar(300  );
        printf("%c\b",92);pausar(300  );
    }
    getch();/* coloquei esse getch    */
            /* porque a tela estava   */
            /* pisacando ,  ai parou  */
}
void movement(){
    int po=mov[1],po2=po,ii,w=5;
    char op = '+';
    textcolor_2(12,0);
    if(mov[0] >20)textcolor_2(15,0);
    if(mov[0] >40)textcolor_2(10,0);
    if(mov[0] >70)textcolor_2(11,0);
    if(mov[0]==90)mov[0]=0;
    mov[0]++;
    for(ii=0;ii<9;ii++){/* linha de cima */
        if(po2==21){
            gotoxy_2(po+4,1);
        }
        else{
            gotoxy_2(po-1,1);
        }
        printf(" ");
        if(po<63){
            gotoxy_2(po,1);
            printf("%c",op);
            po+=w;
        }
    }
    po=mov[2];/* linha de baixo */
    for(ii=0;ii<9;ii++){
        if(po2==21){
            gotoxy_2(po-4,19);
        }
        else{
            gotoxy_2(po+1,19);
        }
        printf(" ");
        if(po>20){
            gotoxy_2(po,19);
            printf("%c",op);
            po-=w;
        }
    }
    po=mov[3];/* linha lateral direita */
    for(ii=0;ii<3;ii++){
        if(po2==21){
            gotoxy_2(64,po+4);
        }
        else{
            gotoxy_2(64,po-1);
        }
        printf(" ");
        gotoxy_2(64,po);
        printf("%c",op);
        po+=w;
    }
    po=mov[4];/* linha lateral esquerda */
    for(ii=0;ii<4;ii++){
        if(po2==21){
            gotoxy_2(18,po-4);
        }
        else{
            gotoxy_2(18,po+1);
        }
        printf(" ");
        if(po>2){
            gotoxy_2(18,po);
            printf("%c",op);
            po-=w;
        }
    }
    mov[1]++;
    mov[2]--;
    mov[3]++;
    mov[4]--;
    if( mov[1] > 25){
        mov[1] = 21 ;
        mov[2] = 63 ;
        mov[3] =  3 ;
        mov[4] = 18 ;
    }
    textcolor_2(11,0);
}

 

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

Fazendo um adendo, fflush(stdin) teria essa função de limpar o buffer do teclado. Tente colocar esse comando depois de todos os fgets, tipo o exemplo abaixo:

do{
        system("cls");
        
        printf("\n--------------------CADASTRO DE CLIENTES-------------------\n");

           printf("\nDigite o telefone com (DDD): ");
           fgets(m_clientes.telefone,15,stdin);
           fprintf(arq, m_clientes.telefone);
           limparbuffer();
          
           printf("\nDigite o nome do cliente: ");
           fgets(m_clientes.nome,50,stdin);

			fflush(stdin);

           fprintf(arq, m_clientes.nome);
           
    
           limparbuffer();
           printf("\nDigite o endereço com n da residencia: ");
           fgets(m_clientes.endereco,100,stdin);

			fflush(stdin);

           fprintf(arq, m_clientes.endereco);
         limparbuffer();
           
           
          
           
    for ( int i = 0; i < sizeof(m_clientes)/sizeof(struct Clientes); i++ )
          {
    if (m_clientes.ativo==0)
              {
                  strcpy(m_clientes.telefone,telefone);
                  strcpy(m_clientes.nome,nome);
                  strcpy(m_clientes.endereco,endereco);
                  break;
              }
          }
          
    limparbuffer();
    printf("Cadastro efetuado com sucesso!\n\n");
    printf("\n----------------------------------------------------------\n");
    printf("\n 1-Continuar\n 0-Sair\n");
    scanf("%d",&opcao);

 

  • Curtir 1
  • Obrigado 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...