Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Gustavo Silva_770218

Listagem de dados não funciona e ação de pesquisa ocorre crash. C.

Recommended Posts

Olá pessoal, estou fazendo um trabalho para a faculdade, bem estou entrando na programação agora e aprendendo C.
 
Estou fazendo um programa para Cadastrar alunos, mas não consigo achar os meus erros. Por enquanto o programa possui as opções de Cadastrar, Listar e Pesquisar, mas somente a cadastrar funciona corretamente =( .

Se puderem ajudar agradeço.
 
#include <stdio.h>
#include <stdlib.h>
#define SIZE 50
  //Variáveis globais
char nome;
int cpf;
int rg;
char curso;
int telefone;
int op;
void cadastro();
void lista();
void pesquisa();
 
//Função principal
int main(void){
//Menu
   do{
   printf("\t\t\t\t--------");
printf("\n\t\t\t\t| Menu |");
printf("\n\t\t\t\t--------");
printf("\n\t\t Bem-vindo. Escolha o que deseja executar.");
    printf("\n----------------");
  printf("\n 1 - Cadastrar |");                //Layout menu
    printf("\n 2 - Listar    |");
    printf("\n 3 - Pesquisar |");
    printf("\n 4 - Sair      |\n");
    printf("----------------\n");
    scanf("%d", &op);
   
     switch(op){
case 1:
cadastro();
break;
case 2:
       lista();
   break;
case 3:
   pesquisa();
break;
case 4:
       system("exit");
break;
default:
printf("\nOpcao invalida.\n");
break; 
}
   }while(op!=4);
}
//Função cadastro
void cadastro(){
static int linha;
do{
printf("============================================");
printf(" \nDigite o Nome: ");
scanf("%s", &nome[linha]);
printf(" \nDigte o CPF: ");
scanf("%d", &cpf[linha]);
printf(" \nDigite o RG: ");
scanf("%d", &rg[linha]);
printf(" \nDigite o Curso: ");
scanf("%s", &curso[linha]);
printf(" \nDigite o Telefone: ");
scanf("%d", &telefone[linha]);
printf("\n Digite 1 para continuar cadastrando ou outro valor para voltar ao menu.\n");
scanf("%d", &op);
linha++;
}while(op==1);
} //Fim da função cadastro
  //Função lista
void lista(){
int i;
for(i=0; i>SIZE; i++){
if(cpf>0){
printf("\nNome: %s\nCPF: %d\nRG: %d\nCurso: %s\nTelefone: %d", nome, cpf, rg, curso, telefone);
}else{
break;
}
}getchar();
getchar();
}
//Fim da função lista
  //Função pesquisa
void pesquisa(){
printf("============================================");
int i;
int cpfPesquisa;
char nomePesquisa;
do{
printf(" \nDigite 1 para pesquisar por Nome ou 2 para pesquisar por CPF.\n");
scanf("%d", &op);
switch(op){
case 1:
         printf(" \nDigite o Nome que procura: ");
           scanf("%s", &nomePesquisa);
             for(i=0; i<SIZE; i++){
            if(strcmp(nome, nomePesquisa)==0);
               printf("\nNome: %s\nCPF: %d\nRG: %d\nCurso: %s\nTelefone: %d", nome, cpf, rg, curso, telefone);
           }
break;
case 2:
       printf(" \nDigite o CPF que procura: ");
         scanf("%d", &cpfPesquisa);
           for(i=0; i<SIZE; i++){
            if(cpf==cpfPesquisa);
               printf("\nNome: %s\nCPF: %d\nRG: %d\nCurso: %s\nTelefone: %d", nome, cpf, rg, curso, telefone);
           }
                 break;
default:
printf("\nOpcao invalida.");
break;  
}
printf ("\n Digite 1 para continuar pesquisando ou outro valor para voltar ao menu.");
} //Fim função pesquisascanf("%d", &op);
}while(op==1);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá!
 

Olha Também sou Iniciante em C, mas vou tentar lhe ajudar . . .
 

- |6|error: ‘size’ undeclared here (not in a function)| - aqui o erro diz que "size" não foi declarada no seu código, não se esqueça de que C é “Case Sensitive” diferenciando maiúsculas de minusculas, logo "size" e "SIZE" são completamente diferentes para o compilador, escolha qual você usará . . .

 

- Na linha 116: o seu while deve ficar dentro ( antes ) da ultima chave de fechamento da sua função e não depois.

 

- Na linha 42: aqui deve-se evitar fazer chamada a funções do sistema, isto reduz a portabilidade e pode causar efeitos indesejados dependendo da implementação, então tente não usar qualquer system(“ ”); que seja em qualquer parte do programa, a não ser que você tenha completa certeza e necessidade de fazer tais chamadas ao sistema.

 

Além disso, se você quer que o programa finalize aqui, você pode usar um simples return 0; ou mesmo dependendo do sistema exit (0); inclusive aqui em meu sistema Linux ao finalizar o programa tente prestar atenção no código de retorno do seu programa, aqui com system(exit); retornou – Process returned 4 (0x4) enquanto que um simples return 0; ou um exit (0); retornou – Process returned 0 (0x0), é apenas um detalhe mas que dependendo da situação pode fazer alguma diferença . . .

 

- Com relação ao menu, aconselho que você crie uma função dedicada para funcionar como menu, e que vá ser chamada ao final de execução de cada função, acho que seria mais apropriado . . .

 

- Com relação as variáveis que vão conter os Dados, pelo tipo de dados que elas vão armazenar, aconselho que você as declare todas do tipo char . . .

 

- dentro dos seus laços for, faltou chaves de abertura e fechamento para os ifs.

 

- Além disso, aqui o compilador retornou uma serie de alertas sobre a utilização dos códigos de formatação usados nos printf() que não seriam apropriados, para os tipos declarados . . .

 

- Qual o objetivo de utilizar variaveis Globais, faz parte de algum exercicio de pratica?

 

- Alem do mais acho que a utilização de um vetor de estruturas seria o mais indicado para o tipo de algoritmo que você está tentando implementar . . .

 

Bom por hora é só isso, tente aplicar as dicas acima e tente terminar o seu código . . .

 

 

Ubuntu 14.04 GNU GCC 4.8 CodeBlocks 13.12

 

 

Espero Ter Ajudado ! ! !

Editado por FelipePetropolis

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • Olá!

     

    Olha Também sou Iniciante em C, mas vou tentar lhe ajudar . . .

     

    - |6|error: ‘size’ undeclared here (not in a function)| - aqui o erro diz que "size" não foi declarada no seu código, não se esqueça de que C é “Case Sensitive” diferenciando maiúsculas de minusculas, logo "size" e "SIZE" são completamente diferentes para o compilador, escolha qual você usará . . .

     

    - Na linha 116: o seu while deve ficar dentro ( antes ) da ultima chave de fechamento da sua função e não depois.

     

    - Na linha 42: aqui deve-se evitar fazer chamada a funções do sistema, isto reduz a portabilidade e pode causar efeitos indesejados dependendo da implementação, então tente não usar qualquer system(“ ”); que seja em qualquer parte do programa, a não ser que você tenha completa certeza e necessidade de fazer tais chamadas ao sistema.

     

    Além disso, se você quer que o programa finalize aqui, você pode usar um simples return 0; ou mesmo dependendo do sistema exit (0); inclusive aqui em meu sistema Linux ao finalizar o programa tente prestar atenção no código de retorno do seu programa, aqui com system(exit); retornou – Process returned 4 (0x4) enquanto que um simples return 0; ou um exit (0); retornou – Process returned 0 (0x0), é apenas um detalhe mas que dependendo da situação pode fazer alguma diferença . . .

     

    - Com relação ao menu, aconselho que você crie uma função dedicada para funcionar como menu, e que vá ser chamada ao final de execução de cada função, acho que seria mais apropriado . . .

     

    - Com relação as variáveis que vão conter os Dados, pelo tipo de dados que elas vão armazenar, aconselho que você as declare todas do tipo char . . .

     

    - dentro dos seus laços for, faltou chaves de abertura e fechamento para os ifs.

     

    - Além disso, aqui o compilador retornou uma serie de alertas sobre a utilização dos códigos de formatação usados nos printf() que não seriam apropriados, para os tipos declarados . . .

     

    - Qual o objetivo de utilizar variaveis Globais, faz parte de algum exercicio de pratica?

     

    - Alem do mais acho que a utilização de um vetor de estruturas seria o mais indicado para o tipo de algoritmo que você está tentando implementar . . .

     

    Bom por hora é só isso, tente aplicar as dicas acima e tente terminar o seu código . . .

     

     

    Ubuntu 14.04 GNU GCC 4.8 CodeBlocks 13.12

     

     

    Espero Ter Ajudado ! ! !

    Obrigado pela ajuda!

     

    As variaveis globais estou utilizando pois achei que seria mais fácil para o tipo de algoritmo.

    Estou indo pra faculdade, mas quando voltar tentarei usar struct como voce disse.

    O estranho é que o compilador não me aponta nenhum erro aqui! 

     

    E desculpe mas, poderia me dizer a formatação correta para se usar nos printf() ?

     

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário






    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

    ×