Ir ao conteúdo
  • Cadastre-se

C Em busca de um aprendizado mais avançado em C


Posts recomendados

Eu estava tentando explorar o GitHub, coisa que nunca fiz para tentar achar algum código avançado e me deparei com um cara, de 2017 que fez uns 3 projetos que achei interessante pro meu aprendizado, porém o primeiro projeto dele estava todo bagunçado, sem indentação nem nada, (lembrando que não sei nem os conceitos básico de C e vou aprender essa semana), quero quebrar a cabeça antes de aprender e depois que aprender voltar a esse código e tentar ler novamente, porém o código não funciona, queria a ajuda de alguém pra arrumar ele, e deixar de um jeito "aprendível e legível"

Segue->


  
#include <stdio.h>
#include <stdlib.h>
void CadastroCliente(int qt ,struct CLIENTE x[]);
void ConsultarCliente(int qt,struct CLIENTE x[]);
void ImprimirFichas(int qt ,struct CLIENTE x[]);
void QuantidadeExames(int qt,struct CLIENTE x[]);
void QuantidadeSexo(int qt,struct CLIENTE x[]  );
void ExameMamografia(int qt,struct CLIENTE x[] );
void ExamesMais(int qt,struct CLIENTE x[]);
  struct CLIENTE{
    int cpf , idade,exame,sexo;
      char nome[20],sobre[20],nomeMedi[20];      //Um registro sobre a pessoa
  }
 
main(){
    int  acao,escolha,cont =0, senha, qtd;
      struct CLIENTE cadCliente[99];  //não entendi
        printf("         ************************************************************\n                B E M   V I N D O   A O    C A D   F A C I L      \n         ************************************************************\n\n\n");
        printf("                    1.A C E S S O   A O   S I S T E M A .\n"); 
		printf("\n\n                                    "); 
		scanf("%d",&acao);       
        system("cls");               
        printf("\n\n\n\n\n\n\n\n\n                          Digite a senha de acesso:"); 
		scanf("%d",&senha);
        system("cls");
        while(senha!=102030){
          printf("\n\n\n\n\n\n\n\n\n                  Senha incorreta!");
          printf("\n\n\n\n\n                          Digite a senha de acesso:"); 
		  scanf("%d",&senha);
          system("cls");
          cont++;
        }                                                    
        printf("\n\n\n\n\n\n\n\n\n\n\n          Quantos clientes serao importados para o banco de dados?"); 
		  scanf("%d",&qtd);   
        system("cls");                                                
        while(escolha!=8){                                               
          printf("         *********************************************************\n                M  E  N  U      P  R  I  N  C  I  P A  L \n         *********************************************************\n\n\n");                                       
          printf("\n\n\n\n1.Cadastro do Cliente.\n\n2.Imprimir Fichas\n\n3.Consulta de cliente.\n\n4.Quantidade de Exames.\n\n5.Quantidade por sexo.\n\n6.Dados Mamografia.\n\n7.Exame mais realizado do dia.\n\n8.Sair do sistema.\n\n\n");
          scanf("%d",&escolha);
          system("cls");                                                                                        
          switch(escolha){
            case 1:
              CadastroCliente(qtd,cadCliente);
              break; 
            case 3:
              ConsultarCliente(qtd,cadCliente);      
              break;
            case 2:
              ImprimirFichas(qtd,cadCliente);
              break;
            case 4:
              QuantidadeExames(qtd,cadCliente);
            break; 
            case 5:
              QuantidadeSexo(qtd,cadCliente);
              break;
            case 6:
              ExameMamografia(qtd,cadCliente);        
              break;
            case 7:
              ExamesMais(qtd,cadCliente);
              break;
          }                      
            cont++;        
        }
system("pause");
}
void CadastroCliente(int qt, struct CLIENTE x[]){
  int i;
    for(i = 1 ; i <=qt ; i++){
      printf("\n\n\n\n\nDigite o nome do cliente:");                                
	    scanf(" %s",&x[i].nome);
      printf("\nDigite o sobrenome do cliente %s:",x[i].nome);                      
	    scanf(" %s",&x[i].sobre);
      printf("\nDigite o sexo do cliente %s:\n1.Masculino\n2.Feminino",x[i].nome);  
	    scanf(" %d",&x[i].sexo);
      printf("\nDigite a idade do cliente %s:",x[i].nome);                                
        scanf("%d",&x[i].idade);
      printf("\nDigite o CPF do cliente %s:",x[i].nome);          
	    scanf("%d",&x[i].cpf);
      printf("\nExcolha o exame a ser feito:\n");              
      printf("-001: Raio x.\n\n-002: Mamografia.\n\n-003: Ultrassonografia.\n\n-004: Ressonancia.\n\n");
        scanf("%d",&x[i].exame);
      printf("\nNome do medico:"); 
	    scanf(" %s",&x[i].nomeMedi);
      system("cls");
    } 
}

void ConsultarCliente(int qt,struct CLIENTE x[]){
  int i , consul, cp, cont =0;
    while(consul !=1){                               
      printf("\ninforme o cpf: "); 
	  scanf("%d",&cp);
      system("cls");         
        for(i = 1 ; i <=qt ; i++){
          if(cp == x[i].cpf){
            printf("Nome do cliente: %s.\n\n",x[i].nome);
            printf("Sobrenome do cliente: %s.\n\n",x[i].sobre);        
             if(x[i].sexo == 1){                  
             printf("Sexo do cliente: Masculino.\n\n");
             }
             if(x[i].sexo == 2){
               printf("Sexo do cliente: Feminino.\n\n");    
             }
               printf("CPF do cliente: %d.\n\n",x[i].cpf);
               printf("Idade do cliente: %d.\n\n",x[i].idade);   
             if(x[i].exame == 001){
               printf("Exame marcado: Raio-x.\n\n");                
                  }
             if(x[i].exame == 002){
                  printf("Exame marcado: Mamografia.\n\n");                
             }
             if(x[i].exame == 003){
               printf("Exame marcado: Ultrassonografia.\n\n");                
             }
             if(x[i].exame == 004){
               printf("Exame marcado: Ressonancia.\n\n");                
             }
               printf("Nome do medico : %s\n\n",x[i].nomeMedi);
             }                               
        }      
                printf("Ir para o menu? 1-Sim - 2-Nao."); 
				scanf("%d",&consul);
                system("cls"); 
                cont++;        
    }
}

void ImprimirFichas(int qt,struct CLIENTE x[]){
  int i,b,cont= 0; 
    while(b!=1){                   
      for(i = 1 ; i <=qt ; i++){
        printf("\n\nCliente %d :\n\n\n",i);                    
        printf("Nome do cliente: %s.\n\n",x[i].nome);
        printf("Sobrenome do cliente: %s.\n\n",x[i].sobre);
        if(x[i].sexo == 1){                  
          printf("Sexo do cliente: Masculino.\n\n");
        }
        if(x[i].sexo == 2){
          printf("Sexo do cliente: Feminino.\n\n");    
        }
          printf("CPF do cliente: %d.\n\n",x[i].cpf);
          printf("Idade do cliente: %d.\n\n",x[i].idade);
        if(x[i].exame == 001){
          printf("Exame marcado: Raio-x.\n\n");  
        }                                        
        if(x[i].exame == 002){
          printf("Exame marcado: Mamografia.\n\n");                
        }
        if(x[i].exame == 003){
          printf("Exame marcado: Ultrassonografia.\n\n");                
        }
        if(x[i].exame == 004){
          printf("Exame marcado: Ressonancia.\n\n");                
        }
          printf("Nome do medico : %s\n\n",x[i].nomeMedi);                               
        }
          printf("Ir pro menu principal, 1.Sim \ 2.Nao ?");
		    scanf("%d",&b);
          system("cls");
          cont++;
    }
}

void QuantidadeExames(int qt ,struct CLIENTE x[]){
  int i,cont=0,cont2=0,cont3=0,cont4=0,contW=0,a;
    while(a!=1){
      for(i = 1 ; i <=qt ; i++){
	    if(x[i].exame == 001){
          cont++;
        }
        if(x[i].exame == 002){
          cont2++;
        }
        if(x[i].exame == 003){
          cont3++;
        }
        if(x[i].exame == 004){
          cont4++;
        }
      }
      printf("\n\nQuantidade de Raio-x Realizados: %d.\n",cont);
      printf("\n\nQuantidade de Mamografia Realizados: %d.\n",cont2);
      printf("\n\nQuantidade de Ultrassonografia Realizados: %d.\n",cont3);
      printf("\n\nQuantidade de Ressonancia Realizados: %d.\n",cont4);
      printf("Ir para o menu? 1-Sim. - 2 - Nao."); 
	    scanf("%d",&a);
      system("cls");
      contW++;
        }
}

void QuantidadeSexo(int qt,struct CLIENTE x[]){
  int i,cont=0,cont2=0,a,contW=0;
    while(a!=1){
      for(i = 1 ; i <=qt ; i++){
        if(x[i].sexo == 1){
        cont++;
        }
        if(x[i].sexo == 2){
          cont2++;
        }
      }
      printf("\n\nQuantidade de Homens atendidos: %d.\n",cont);
      printf("\n\nQuantidade de Mulheres atendidas: %d.\n\n",cont2);
      printf("Ir para o menu? 1-Sim. - 2 - Nao."); 
	  scanf("%d",&a);
      system("cls");
      contW++;
    }
}

void ExameMamografia(int qt,struct CLIENTE x[]){
  int i , contW = 0,a;
    while(a!=1){
      for(i = 1 ; i<=qt ; i++){
          printf("\n\nCliente %d :\n\n\n",i);
          printf("Nome do cliente: %s.\n\n",x[i].nome);
          printf("Sobrenome do cliente: %s.\n\n",x[i].sobre);
        if(x[i].sexo == 1){                  
          printf("Sexo do cliente: Masculino.\n\n");
        }
        if(x[i].sexo == 2){
          printf("Sexo do cliente: Feminino.\n\n");    
        }
          printf("CPF do cliente: %d.\n\n",x[i].cpf);
          printf("Idade do cliente: %d.\n\n",x[i].idade);
        if(x[i].exame == 001){
          printf("Exame marcado: Raio-x.\n\n");                
        }
        if(x[i].exame == 002){
          printf("Exame marcado: Mamografia.\n\n");                
        }
        if(x[i].exame == 003){
          printf("Exame marcado: Ultrassonografia.\n\n");                
        }
        if(x[i].exame == 004){
          printf("Exame marcado: Ressonancia.\n\n");                
        }
          printf("Nome do medico : %s\n\n",x[i].nomeMedi);
      } 
               
       
    printf("Ir para o menu? 1-Sim. - 2 - Nao."); scanf("%d",&a);
    system("cls");
    contW++;
  }
}

void ExamesMais(int qt,struct CLIENTE x[]){
  int i,cont=0,cont2=0,cont3=0,cont4=0,a;
    while(a!=1){
      if(x[i].exame == 001){
        cont++;
      }
      if(x[i].exame == 002){
        cont2++;
      }
      if(x[i].exame == 003){
        cont3++;
      }
      if(x[i].exame == 004){
        cont4++;
      }
    }
    
      if(cont>cont2 && cont > cont3 && cont >cont4){
        printf("\n\nO Raio-x foi o mais realizado com %d exames.\n\n",cont);           
      }
      if(cont2>cont && cont2 > cont3 && cont2 >cont4){
        printf("\n\nA mamografia foi a mais realizada com %d exames.\n\n",cont2);              
      }      
      if(cont3>cont && cont3 > cont2 && cont3 >cont4){
        printf("\n\nA Ultrassonografia foi a mais realizada com %d exames.\n\n",cont3);        
      }
      if(cont4>cont && cont4 > cont2 && cont4 >cont3){
        printf("\n\nA Ressonancia foi a mais realizada com %d exames.\n\n",cont4);             
      }
        printf("Ir para o menu? 1-Sim. - 2 - Nao."); scanf("%d",&a);
        system("cls");
        contW++;
       
}

 

Link para o comentário
Compartilhar em outros sites

O código citado não possui conceitos realmente avançados de C, mas é bastante para absorver se não tem uma experiência com a linguagem. Eu não o usaria como referência para aprendizado devido aos inúmeros defeitos:

* uso de comandos shell atrelados ao Windows `system(cls)`;

* uso de octais literais no lugar de decimais;

* números mágicos espalhados pelo código quando deviam estar em `enum`s ou `defines`;

* uso de `scanf()` sem limites de buffer;

* problemas na formatação de código, como o uso de maiúsculas para nomear uma struct que não é nem constante;

* alocação estática do vetor de clientes sem verificação do intervalo informado pelo usuário e usado pelas próximas funções.

 

Se tiver dificuldades em aprender usando os livros mais antigos (Luís Damas, "The C Programming Language"), há o "21st Century C" do Ben Klemens. Uma opção gratuita e de boa qualidade é o "Modern C" (https://modernc.gforge.inria.fr/).

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

7 horas atrás, AnonymousLPH disse:

Eu estava tentando explorar o GitHub, coisa que nunca fiz para tentar achar algum código avançado e me deparei com um cara, de 2017 que fez uns 3 projetos que achei interessante pro meu aprendizado, porém o primeiro projeto dele estava todo bagunçado, sem indentação nem nada, (lembrando que não sei nem os conceitos básico de C e vou aprender essa semana), quero quebrar a cabeça antes de aprender e depois que aprender voltar a esse código e tentar ler novamente, porém o código não funciona

 

Talvez devesse mesmo aprender os tais conceitos básicos antes. Você tem um livro? Seria o melhor começo eu acho. Sua escola não assina um serviço de biblioteca online por exemplo?

 

Esse programa que escolheu não parece muito bom... Não me surpreende que não funcione.

Se você quer ver códigos para aprender talvez pudesse buscar exemplos dos livros mesmo. Programas sofisticados de produção estão disponíveis claro online, mas talvez seja cedo para tentar entendê-los. E se buscar códigos no GitHub pode pegar programas ruins e nem saber julgar que são ruins. Ao menos os autores dos livros tem uma certa responsabilidade com o que publicam... Pense nisso.

 

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

 

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

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!