Ir ao conteúdo
  • Cadastre-se

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


Posts recomendados

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

Link para o comentário
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 ! ! !

Link para o comentário
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() ?

 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

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