Ir ao conteúdo
  • Cadastre-se
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 ! ! !

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

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

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

×