Ir ao conteúdo
  • Cadastre-se

C Não estou conseguindo colocar a função pra excluir todos os dados cadastrados.


Posts recomendados

oi pessoal tudo bem, eu estou no 2 semestre de Análise e Desenvolvimento de sistema,
e estou tendo que fazer um programa de cadastro de alunos, estou com dificuldade para colocar a função EXCLUIR TODOS..
se alguém souber pode me dar um help. 

 

 

#include<stdio.h>
#include <stdlib.h>
#define SIZE 200
char nome[SIZE][50];
char sobrenome[SIZE][50];
char email[SIZE][50];
double cpf[SIZE];
int op;
double ra[SIZE];
void cadastro();
void pesquisa();
void lista();

void remover();

int main(void){
    //cadastro();
    //lista();
    //pesquisa();
    
    do{
        system("cls");//
        printf("\n----CADASTRAR ALUNO----\n\n\n1 - Cadastrar\n2 - Listar todos\n3 - Pesquisar\n4 - Sair\n  ");
        scanf("%d", &op);
        switch(op){
            case 1:
                cadastro();
                break;
            case 2:
                lista();
                break;
            case 3:
                pesquisa();
                break;
            case 4:
                system("exit"); // fechar janela e voltar pro menu
                break;
            default:
            printf("Opcao invalida");
            getchar();
            getchar();
              break;    
        }
    }while(op!=4);
    
    
    
}
void lista(){
    int i;
    for(i=0;i<SIZE;i++){
        if(cpf[i]> 0){
        printf("\nNome: %s \nSobrenome: %s \nEmail: %s   \nCPF: %.0lf \nra: %.0lf ", nome[i], sobrenome[i],  email[i], cpf[i], ra[i]);
        } else{
            break;
        }
    
    }
    getchar();
    getchar();
}
void cadastro(){
    static int linha;
    do{
        // printf permite apresentar na tela os valores de qualquer tipo de dado
        printf("\nDigite o seu nome: ");
        scanf("%s", &nome[linha] );
        
        printf("\nDigite seu sobrenome: ");
        scanf("%s", &sobrenome[linha]);
        
        //scanf É utilizada para fazer a leitura de dados formatados via teclado.
        printf("\nDigite o seu email: "); 
        scanf("%s", &email[linha] ); 
        
        printf("\nDigite o seu cpf: ");
        scanf("%lf", &cpf[linha] );
        
        printf("\nDigite o seu RA: ");
        scanf("%lf", &ra[linha]);
    
        printf("\nDigite 1 para continuar ou outro valor para para sair: ");
        scanf("%d", &op  ); 
        // para o programar continuar na linha seguinte, e conter os dados anteriomente digitados salvos
        // opção 1
        linha++; 
        //opção 2 linha=linha+1; 
    }while(op==1);
} // fim da função cadastro
void pesquisa(){
    double cpfPesquisa;
    char emailPesquisa[50];
    char nomePesquisa[50];
    char sobrenomePesquisa[50];
    double raPesquisa;
    
    
    int i; 
    do{
        
        printf("\n\tPara fazer a busca digite umas das opções abaixo:\n\n ");
        printf("\n\t1 - para pesquisar por Nome\n ");
        printf("\t2 - para pesquisar por Sobrenome\n ");
        printf("\t3 - para pesquisar por Email\n ");
        printf("\t4 - para pesquisar  por CPF\n ");  
        printf("\t5 - para pesquisar por Ra\n ");
        scanf("%d", &op);
        /*Utilizamos SWICTH quando queremos comparar a mesma variável ou expressão com várias opções.
        SWITCH é um comando em C que serve para fazer testes condicionais, testando igualdades, 
        onde podemos usar várias opções de comparações*/
      switch(op){
              case 1:
               printf("\nDigite o NOME:  ");
                   scanf("%s", &nomePesquisa);
                   for(i==0;i<SIZE;i++){
                       if(strcmp(nome[i], nomePesquisa)==0){ // strcmp vai comparar sem o emial[i] é igual o que esta no emailPesquisa)){ 
                           printf("\nNome: %s\nSobrenome: %s\nEmail: %s\nCPF: %.lf\nRA: %lf", nome[i], sobrenome[i], email[i], cpf[i], ra[i]);
                    }
                          
                  }
                  
              break; 
            case 2:
               printf("\nDigite o SOBRENOME:  ");
                   scanf("%s", &sobrenomePesquisa);
                   for(i==0;i<SIZE;i++){
                       if(strcmp(sobrenome[i], sobrenomePesquisa)==0){ // strcmp vai comparar sem o emial[i] é igual o que esta no emailPesquisa)){ 
                           printf("\nNome: %s\nSobrenome: %s\nEmail: %s\nCPF: %lf\nRA: %lf", nome[i], sobrenome[i], email[i], cpf[i], ra[i]);
                    }  
              
                      }
              break;
               case 3:
                       printf("\nDigite o E-mail:  ");
                   scanf("%s", &emailPesquisa);
                   for(i==0;i<SIZE;i++){
                       if(strcmp(email[i], emailPesquisa)==0){ // strcmp vai comparar sem o emial[i] é igual o que esta no emailPesquisa)){ 
                               printf("\nNome: %s\nSobrenome: %s\nEmail: %s\nCPF: %lf\nRA: %lf", nome[i], sobrenome[i], email[i], cpf[i], ra[i]);
                        
                    }
                  }
                   break; 
                   
               case 4:
                printf("\nDigite o CPF:  " );
                   scanf("%lf", &cpfPesquisa);
                   for(i=0 ;i<SIZE; i++ ) {
                       if(cpf[i]==cpfPesquisa){
                          printf("\nNome: %s\nSobrenome: %s\nEmail: %s\nCPF: %lf\nRA: %lf", nome[i], sobrenome[i], email[i], cpf[i], ra[i]);
                    }
                       
                   }
                   break;
               
            case 5:
                printf("\nDigite o Ra:  " );
                   scanf("%lf", &cpfPesquisa);
                   for(i=0 ;i<SIZE; i++ ) {
                       if(ra[i]==raPesquisa){
                          printf("\nNome: %s\nSobrenome: %s\nEmail: %s\nCPF: %lf\nRA: %lf", nome[i], sobrenome[i], email[i], cpf[i], ra[i]);
                               
                       }
                   }
                   break; 
                  default:
                      printf("\n Opção invalida");
                  
                break;         
       }
       printf("\nDigite 1 para continuar pesquisando ");
       scanf("%d", &op);
       
    }while(op==1);
    
}

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

@Dener Andrade       não se pode excluir os dados ,   apenas substituir o que estiver nas posições da memória ,  então use om laço de repetição que pode ser o For mesmo e percorra os vetores Que você quiser remover os dados e preencha tais vetores com outro valor , e assim quando for pesquisar e encontrando esse novo valor inserido nos vetores saberá que não tem nenhum dados cadastrado ,  e o cpf e ra pode ser do tipo char ,  para não usar esse double , pois não irá usar esses dados para fazer nenhum cálculo ,  e seu código com algumas modificações  ficou assim  :

#define _WIN32_WINNT 0x0500       // tem ficar aqui na primeira linha 
#define _CRT_SECURE_NO_WARNINGS   // para usar scanf e outras funcoes no visual studio
#include <stdio.h>
#include <windows.h>
#include <ctype.h>                // para usar funcoes toupper e outras
#include <conio.h>                // biblioteca antiga para usar o comandô getch
#include <string.h>               // faltou esse include
#include <stdlib.h>
#define cls system("cls");        // Limpa a Tela
#define  getch() _getch()         // para usar  comandô getch() no visual studio
#define        SIZE   200
char     nome [SIZE][50];
char sobrenome[SIZE][50];
char email    [SIZE][50];
char cpf      [SIZE][50];
char ra       [SIZE][50];
int cadastro  ( int    );
void pesquisa ();
void listar   ();
void remover  ();
int  pesqui   ( char* , char[200][50] );
int main(void) 
{
    int op=0,c=0;
    do
    {
        cls
        printf("\n----CADASTRAR ALUNO----\n\n\n\
                \r 1 - Cadastrar             \n\
                \r 2 - Listar todos          \n\
                \r 3 - Pesquisar             \n\
                \r 4 - ReMover todoS         \n\
                \r 5 - Sair  "                );
        printf("\n");
        op = getch() - 48;
        switch (op) 
        {
        case 1:
            c = cadastro( c ); // c eh contador de Linhas
            break;
        case 2:
            listar();
            break;
        case 3:
            pesquisa();
            break;
        case 4:
            remover();
            break;
        case 5:
            printf("\n\n\nSaindo de Programa . . . !\n\n\n");;
            system("exit"); // fechar janela e voltar pro Windows         // menu
            break;
        default:
            printf("Opcao invalida");
        }
    } while ( op != 5 );
    return 0;
}
void listar() 
{
    int i;
    for (i = 0; i < SIZE; i++) 
    {
        if (cpf[i] > 0) 
        {
            printf("\n Nome -------: %s\n\
                    \r Sobrenome --: %s\n\
                    \r Email ------: %s\n\
                    \r CPF --------: %s\n\
                    \r ra ---------: %s\n", 
                     nome[i], sobrenome[i], 
                     email[i],cpf[i], ra[i]);
        }
        else 
        {
            printf("\tTecle\n");
            getch();
            break;
        }

    }
}
int cadastro(int linha )
{
    char aux[50];
    do 
    {
        // printf permite apresentar na tela os valores de qualquer tipo de dado
        printf(" o nome --: ");
        fgets( aux, 50, stdin );;
        aux[ strlen(aux) - 1] = '\0';
        strcpy( nome[linha], aux );

        printf(" o sobrenome --: ");
        fgets( aux, 50, stdin );;
        aux[ strlen(aux) - 1] = '\0';
        strcpy( sobrenome[linha], aux );

        //scanf É utilizada para fazer a leitura de dados formatados via teclado.
        printf(" o email: ");
        fgets( aux, 50, stdin );;
        aux[ strlen(aux) - 1] = '\0';
        strcpy( email[linha], aux );

        printf(" o cpf ---: ");
        fgets( aux, 50, stdin );;
        aux[ strlen(aux) - 1] = '\0';
        strcpy( cpf[linha], aux );

        printf(" o RA -----: ");
        fgets( aux, 50, stdin );;
        aux[ strlen(aux) - 1] = '\0';
        strcpy( ra[linha], aux );

        printf("\ncontinuar S/N ");
        // para o programa continuar na linha seguinte, e conter os dados anteriomente digitados salvos
        linha++;
    } while (toupper((char)getch()) != 'N');
    return linha;
} // fim da função cadastrô
void pesquisa()
{
    char aux[51];
    int op;
    do 
    {
        printf("\n\tPara fazer a busca digite umas das opções abaixo:\n\n\
                 \r\t 1 - para pesquisar por Nome     \n\
                 \r\t 2 - para pesquisar por Sobrenome\n\
                 \r\t 3 - para pesquisar por Email    \n\
                 \r\t 4 - para pesquisar  por CPF     \n\
                 \r\t 5 - para pesquisar por Ra       \n\
                 \r\t     escolha ");
        op = getch() - 48;
        /*Utilizamos SWICTH quando queremos comparar a mesma variável ou expressão com várias opções.
        SWITCH é um comando em C que serve para fazer testes condicionais, testando igualdades,
        onde podemos usar várias opções de comparações*/
        switch (  op  )
        {
        case 1:
            printf("\nDigite o NOME:  ");
            fgets(aux, 50, stdin);;
            aux[strlen(aux) - 1] = '\0';
            pesqui(aux, nome);
            break;
        case 2:
            printf("\nDigite o SOBRENOME:  ");
            fgets(aux, 50, stdin);;
            aux[strlen(aux) - 1] = '\0';
            pesqui(aux, sobrenome);
            break;
        case 3:
            printf("\nDigite o E-mail:  ");
            fgets(aux, 50, stdin);;
            aux[strlen(aux) - 1] = '\0';
            pesqui(aux, email);
            break;
        case 4:
            printf("\nDigite o CPF:  ");
            fgets(aux, 50, stdin);;
            aux[strlen(aux) - 1] = '\0';
            pesqui(aux, cpf);
            break;
        case 5:
            printf("\nDigite o Ra:  ");
            fgets(aux, 50, stdin);;
            aux[strlen(aux) - 1] = '\0';
            pesqui(aux, nome);
            break;
        }
        printf("\nContinuar S/N\n");
    } while (toupper((char)getch()) != 'N' );
}
int pesqui(char* a, char b[200][50] )
{
    int i=0,flg=0;
    for (i == 0; i < SIZE; i++)
    {
        if (strcmp( a , b[i] ) == 0)   // strcmp vai comparar se o dado pesquizado é igual ao que esta no vetor
        {
            flg = 1;
            printf("\n Nome--------: %s\n\
                    \r Sobrenome --: %s\n\
                    \r Email ------: %s\n\
                    \r CPF --------: %s\n\
                    \r RA ---------: %s\n",
                nome[i], sobrenome[i],
                email[i], cpf[i], ra[i]);
            break;
        }
    }
    if (!flg)
        printf("\nNao tem naDa Cadastrado . . . !\n\n");
    return 0;
}
void remover()
{
    int i,c=200;
    printf("\n\nremovendo . . . !  \tTecle\n");
    for (i = 0; i < SIZE; i++)
    {
        strcpy(      nome[i] , "0" );
        strcpy( sobrenome[i] , "0" );
        strcpy(     email[i] , "0" );
        strcpy(       cpf[i] , "0" );
        strcpy(        ra[i] , "0" );
    }
    getch();
}

 

Link para o comentário
Compartilhar em outros sites

Use o tal botão code, como está no primeiro post do forum...

Ajude os outros a ajudar você. Veja a diferença

 

#include <stdio.h>
#include <stdlib.h>
#define SIZE 200
char   nome[SIZE][50];
char   sobrenome[SIZE][50];
char   email[SIZE][50];
double cpf[SIZE];
int    op;
double ra[SIZE];
void   cadastro();
void   pesquisa();
void   lista();

void remover();

int main(void)
{
    // cadastro();
    // lista();
    // pesquisa();

    do {
        system("cls");  //
        printf(
            "\n----CADASTRAR ALUNO----\n\n\n1 - Cadastrar\n2 - Listar "
            "todos\n3 - Pesquisar\n4 - Sair\n  ");
        scanf("%d", &op);
        switch (op)
        {
            case 1:
                cadastro();
                break;
            case 2:
                lista();
                break;
            case 3:
                pesquisa();
                break;
            case 4:
                system("exit");  // fechar janela e voltar pro menu
                break;
            default:
                printf("Opcao invalida");
                getchar();
                getchar();
                break;
        }
    } while (op != 4);
}
void lista()
{
    int i;
    for (i = 0; i < SIZE; i++)
    {
        if (cpf[i] > 0)
        {
            printf(
                "\nNome: %s \nSobrenome: %s \nEmail: %s   \nCPF: %.0lf "
                "\nra: %.0lf ",
                nome[i], sobrenome[i], email[i], cpf[i], ra[i]);
        }
        else
        {
            break;
        }
    }
    getchar();
    getchar();
}
void cadastro()
{
    static int linha;
    do {
        // printf permite apresentar na tela os valores de qualquer tipo
        // de dado
        printf("\nDigite o seu nome: ");
        scanf("%s", &nome[linha]);

        printf("\nDigite seu sobrenome: ");
        scanf("%s", &sobrenome[linha]);

        // scanf É utilizada para fazer a leitura de dados formatados
        // via teclado.
        printf("\nDigite o seu email: ");
        scanf("%s", &email[linha]);

        printf("\nDigite o seu cpf: ");
        scanf("%lf", &cpf[linha]);

        printf("\nDigite o seu RA: ");
        scanf("%lf", &ra[linha]);

        printf(
            "\nDigite 1 para continuar ou outro valor para para "
            "sair: ");
        scanf("%d", &op);
        // para o programar continuar na linha seguinte, e conter os
        // dados anteriomente digitados salvos opção 1
        linha++;
        // opção 2 linha=linha+1;
    } while (op == 1);
}  // fim da função cadastro
void pesquisa()
{
    double cpfPesquisa;
    char   emailPesquisa[50];
    char   nomePesquisa[50];
    char   sobrenomePesquisa[50];
    double raPesquisa;

    int i;
    do {
        printf(
            "\n\tPara fazer a busca digite umas das opções "
            "abaixo:\n\n ");
        printf("\n\t1 - para pesquisar por Nome\n ");
        printf("\t2 - para pesquisar por Sobrenome\n ");
        printf("\t3 - para pesquisar por Email\n ");
        printf("\t4 - para pesquisar  por CPF\n ");
        printf("\t5 - para pesquisar por Ra\n ");
        scanf("%d", &op);
        /*Utilizamos SWICTH quando queremos comparar a mesma variável
        ou expressão com várias opções. SWITCH é um comando em C
        que serve para fazer testes condicionais, testando igualdades,
        onde podemos usar várias opções de comparações*/
        switch (op)
        {
            case 1:
                printf("\nDigite o NOME:  ");
                scanf("%s", &nomePesquisa);
                for (i == 0; i < SIZE; i++)
                {
                    if (strcmp(nome[i], nomePesquisa) == 0)
                    {  // strcmp vai comparar sem o emial[i] é igual o
                       // que esta no emailPesquisa)){
                        printf(
                            "\nNome: %s\nSobrenome: %s\nEmail: "
                            "%s\nCPF: %.lf\nRA: %lf",
                            nome[i], sobrenome[i], email[i], cpf[i],
                            ra[i]);
                    }
                }

                break;
            case 2:
                printf("\nDigite o SOBRENOME:  ");
                scanf("%s", &sobrenomePesquisa);
                for (i == 0; i < SIZE; i++)
                {
                    if (strcmp(sobrenome[i], sobrenomePesquisa) == 0)
                    {  // strcmp vai comparar sem o emial[i] é igual o
                       // que esta no emailPesquisa)){
                        printf(
                            "\nNome: %s\nSobrenome: %s\nEmail: "
                            "%s\nCPF: %lf\nRA: %lf",
                            nome[i], sobrenome[i], email[i], cpf[i],
                            ra[i]);
                    }
                }
                break;
            case 3:
                printf("\nDigite o E-mail:  ");
                scanf("%s", &emailPesquisa);
                for (i == 0; i < SIZE; i++)
                {
                    if (strcmp(email[i], emailPesquisa) == 0)
                    {  // strcmp vai comparar sem o emial[i] é igual o
                       // que esta no emailPesquisa)){
                        printf(
                            "\nNome: %s\nSobrenome: %s\nEmail: "
                            "%s\nCPF: %lf\nRA: %lf",
                            nome[i], sobrenome[i], email[i], cpf[i],
                            ra[i]);
                    }
                }
                break;

            case 4:
                printf("\nDigite o CPF:  ");
                scanf("%lf", &cpfPesquisa);
                for (i = 0; i < SIZE; i++)
                {
                    if (cpf[i] == cpfPesquisa)
                    {
                        printf(
                            "\nNome: %s\nSobrenome: %s\nEmail: "
                            "%s\nCPF: %lf\nRA: %lf",
                            nome[i], sobrenome[i], email[i], cpf[i],
                            ra[i]);
                    }
                }
                break;

            case 5:
                printf("\nDigite o Ra:  ");
                scanf("%lf", &cpfPesquisa);
                for (i = 0; i < SIZE; i++)
                {
                    if (ra[i] == raPesquisa)
                    {
                        printf(
                            "\nNome: %s\nSobrenome: %s\nEmail: "
                            "%s\nCPF: %lf\nRA: %lf",
                            nome[i], sobrenome[i], email[i], cpf[i],
                            ra[i]);
                    }
                }
                break;
            default:
                printf("\n Opção invalida");

                break;
        }
        printf("\nDigite 1 para continuar pesquisando ");
        scanf("%d", &op);

    } while (op == 1);
}

 

Sobre seu programa

 

Parece ter muitos dos problemas comuns aos programas que aparecem aqui. Imagino que seja uma reflexo da maneira como ensinam isso nas escolas.

 

Escrevendo assim vai ter muito mais trabalho para terminar, testar ou alterar o programa. E vai ser difícil de aproveitar algo do programa no próximo.

 

Algumas coisas que pode achar relevantes:

 

  • Nunca use isso
void   cadastro();
void   pesquisa();
void   lista();
void   remover();

 

Funções que retornam void e não tem argumentos são um buraco negro. Dependem de variáveis globais, sem controle nenhum, e não retornam nada. Não servem para nada.
 

Use argumentos, retorne valores.

 

  • Evite acentos em comentários e comentários óbvios, como descrever o efeito de printf(). Comente o que está fazendo e porque está fazendo.
  • não use system(). Nunca. Nada vai aprender. Não estará fazendo nada exceto mandar uma string para o interpretador de comandos, isso na confiança de que system() seja o que está pensando que é, porque alguém pode ter trocado.
  • TESTE sempre o retorno de scanf(). É ingênuo não testar, pra dizer o mínimo
  • Não escreva nunca programas interativos enquanto as operações não estão prontas e testadas. Só vai perder tempo, muito tempo, para testar o programa. De que serve um menu para testar uma inserção num cadastro?
  • Entenda que praticamente TODOS esses exercícios para iniciantes envolvem um container. Como aqui é o cadastro de alunos. Escreva um programa bom que trata isso e poderá usar sempre o mesmo e terminar os programas em 30 '
  • use estruturas. Escreva em torno dos dados. Os dados aqui são um conjunto de alunos e não um aluno. Mas seu programa não isola nem um nem outro e por isso vai ter um trabalho muito maior.
  • um printf() de 5 linhas é muito mais esperto que 5 printf() de uma linha e roda em um décimo do tempo, possivelmente menos.
  • se tem um menu porque não tem uma função para mostrar o menu e retornar a opção já validada?
  • não precisa "remover" nada. Apenas invalidar, por exemplo usando uma marca ou um contador...
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@arfnetomuito obrigado pela ajuda e pelo feedback! , vou me atentar e melhorar tudo isso que você mencionou, sei que estou no começo da programação e toda ajuda e conselho são sempre bem vindos.
Valeu mesmo !

15 horas atrás, devair1010 disse:

@Dener Andrade       não se pode excluir os dados ,   apenas substituir o que estiver nas posições da memória ,  então use om laço de repetição que pode ser o For mesmo e percorra os vetores Que você quiser remover os dados e preencha tais vetores com outro valor , e assim quando for pesquisar e encontrando esse novo valor inserido nos vetores saberá que não tem nenhum dados cadastrado ,  e o cpf e ra pode ser do tipo char ,  para não usar esse double , pois não irá usar esses dados para fazer nenhum cálculo ,  e seu código com algumas modificações  ficou assim  :

#define _WIN32_WINNT 0x0500       // tem ficar aqui na primeira linha 
#define _CRT_SECURE_NO_WARNINGS   // para usar scanf e outras funcoes no visual studio
#include <stdio.h>
#include <windows.h>
#include <ctype.h>                // para usar funcoes toupper e outras
#include <conio.h>                // biblioteca antiga para usar o comandô getch
#include <string.h>               // faltou esse include
#include <stdlib.h>
#define cls system("cls");        // Limpa a Tela
#define  getch() _getch()         // para usar  comandô getch() no visual studio
#define        SIZE   200
char     nome [SIZE][50];
char sobrenome[SIZE][50];
char email    [SIZE][50];
char cpf      [SIZE][50];
char ra       [SIZE][50];
int cadastro  ( int    );
void pesquisa ();
void listar   ();
void remover  ();
int  pesqui   ( char* , char[200][50] );
int main(void) 
{
    int op=0,c=0;
    do
    {
        cls
        printf("\n----CADASTRAR ALUNO----\n\n\n\
                \r 1 - Cadastrar             \n\
                \r 2 - Listar todos          \n\
                \r 3 - Pesquisar             \n\
                \r 4 - ReMover todoS         \n\
                \r 5 - Sair  "                );
        printf("\n");
        op = getch() - 48;
        switch (op) 
        {
        case 1:
            c = cadastro( c ); // c eh contador de Linhas
            break;
        case 2:
            listar();
            break;
        case 3:
            pesquisa();
            break;
        case 4:
            remover();
            break;
        case 5:
            printf("\n\n\nSaindo de Programa . . . !\n\n\n");;
            system("exit"); // fechar janela e voltar pro Windows         // menu
            break;
        default:
            printf("Opcao invalida");
        }
    } while ( op != 5 );
    return 0;
}
void listar() 
{
    int i;
    for (i = 0; i < SIZE; i++) 
    {
        if (cpf[i] > 0) 
        {
            printf("\n Nome -------: %s\n\
                    \r Sobrenome --: %s\n\
                    \r Email ------: %s\n\
                    \r CPF --------: %s\n\
                    \r ra ---------: %s\n", 
                     nome[i], sobrenome[i], 
                     email[i],cpf[i], ra[i]);
        }
        else 
        {
            printf("\tTecle\n");
            getch();
            break;
        }

    }
}
int cadastro(int linha )
{
    char aux[50];
    do 
    {
        // printf permite apresentar na tela os valores de qualquer tipo de dado
        printf(" o nome --: ");
        fgets( aux, 50, stdin );;
        aux[ strlen(aux) - 1] = '\0';
        strcpy( nome[linha], aux );

        printf(" o sobrenome --: ");
        fgets( aux, 50, stdin );;
        aux[ strlen(aux) - 1] = '\0';
        strcpy( sobrenome[linha], aux );

        //scanf É utilizada para fazer a leitura de dados formatados via teclado.
        printf(" o email: ");
        fgets( aux, 50, stdin );;
        aux[ strlen(aux) - 1] = '\0';
        strcpy( email[linha], aux );

        printf(" o cpf ---: ");
        fgets( aux, 50, stdin );;
        aux[ strlen(aux) - 1] = '\0';
        strcpy( cpf[linha], aux );

        printf(" o RA -----: ");
        fgets( aux, 50, stdin );;
        aux[ strlen(aux) - 1] = '\0';
        strcpy( ra[linha], aux );

        printf("\ncontinuar S/N ");
        // para o programa continuar na linha seguinte, e conter os dados anteriomente digitados salvos
        linha++;
    } while (toupper((char)getch()) != 'N');
    return linha;
} // fim da função cadastrô
void pesquisa()
{
    char aux[51];
    int op;
    do 
    {
        printf("\n\tPara fazer a busca digite umas das opções abaixo:\n\n\
                 \r\t 1 - para pesquisar por Nome     \n\
                 \r\t 2 - para pesquisar por Sobrenome\n\
                 \r\t 3 - para pesquisar por Email    \n\
                 \r\t 4 - para pesquisar  por CPF     \n\
                 \r\t 5 - para pesquisar por Ra       \n\
                 \r\t     escolha ");
        op = getch() - 48;
        /*Utilizamos SWICTH quando queremos comparar a mesma variável ou expressão com várias opções.
        SWITCH é um comando em C que serve para fazer testes condicionais, testando igualdades,
        onde podemos usar várias opções de comparações*/
        switch (  op  )
        {
        case 1:
            printf("\nDigite o NOME:  ");
            fgets(aux, 50, stdin);;
            aux[strlen(aux) - 1] = '\0';
            pesqui(aux, nome);
            break;
        case 2:
            printf("\nDigite o SOBRENOME:  ");
            fgets(aux, 50, stdin);;
            aux[strlen(aux) - 1] = '\0';
            pesqui(aux, sobrenome);
            break;
        case 3:
            printf("\nDigite o E-mail:  ");
            fgets(aux, 50, stdin);;
            aux[strlen(aux) - 1] = '\0';
            pesqui(aux, email);
            break;
        case 4:
            printf("\nDigite o CPF:  ");
            fgets(aux, 50, stdin);;
            aux[strlen(aux) - 1] = '\0';
            pesqui(aux, cpf);
            break;
        case 5:
            printf("\nDigite o Ra:  ");
            fgets(aux, 50, stdin);;
            aux[strlen(aux) - 1] = '\0';
            pesqui(aux, nome);
            break;
        }
        printf("\nContinuar S/N\n");
    } while (toupper((char)getch()) != 'N' );
}
int pesqui(char* a, char b[200][50] )
{
    int i=0,flg=0;
    for (i == 0; i < SIZE; i++)
    {
        if (strcmp( a , b[i] ) == 0)   // strcmp vai comparar se o dado pesquizado é igual ao que esta no vetor
        {
            flg = 1;
            printf("\n Nome--------: %s\n\
                    \r Sobrenome --: %s\n\
                    \r Email ------: %s\n\
                    \r CPF --------: %s\n\
                    \r RA ---------: %s\n",
                nome[i], sobrenome[i],
                email[i], cpf[i], ra[i]);
            break;
        }
    }
    if (!flg)
        printf("\nNao tem naDa Cadastrado . . . !\n\n");
    return 0;
}
void remover()
{
    int i,c=200;
    printf("\n\nremovendo . . . !  \tTecle\n");
    for (i = 0; i < SIZE; i++)
    {
        strcpy(      nome[i] , "0" );
        strcpy( sobrenome[i] , "0" );
        strcpy(     email[i] , "0" );
        strcpy(       cpf[i] , "0" );
        strcpy(        ra[i] , "0" );
    }
    getch();
}

 

 

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

@devair1010 Oi Devair boa noite, eu executei o código que você enviou  e na paste de Listar todos, quando eu aperto a tecla 2 pra listar, aparece na tela bem rápido e depois some,  vi que pra isso é utilizado o break, mas mesmo assim não esta funcionando..

1 hora atrás, Dener Andrade disse:

@arfnetomuito obrigado pela ajuda e pelo feedback! , vou me atentar e melhorar tudo isso que você mencionou, sei que estou no começo da programação e toda ajuda e conselho são sempre bem vindos.
Valeu mesmo !

 

 

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

Ainda sobre o que escrevi, vou mostrar uma maneira de começar isso. Em torno dos dados. Isso em geral leva  a programas corretos por construção, que rodam certinho logo de início, e são fáceis de alterar, testar e adaptar para o próximo programa, que nesses casos é sempre muito parecido. Em geral esses programas para iniciantes giram em torno de algum container, um cadastro de dados de algum tipo. E o cadastro é mostrado, filtrado, misturado, classificado... Veja sua lista de exercícios por exemplo ;) 

 

Assim, se você tiver um programa sólido para começar todos os outros saem naturalmente. O mundo profissional também não é assim muito criativo e as estruturas se repetem.

 

De volta ao programa

 

char   nome[SIZE][50];
char   sobrenome[SIZE][50];
char   email[SIZE][50];
double cpf[SIZE];
double ra[SIZE];

 

Isso é o que tem em termos de aluno, e esse nem é o alvo de seu programa: o alvo é uma coleção de alunos. Uma coleção geralmente tem um campo chave, e no seu caso pode ser o RA ou o CPF. E precisa saber a quantidade de alunos sempre.

 

E o que você tem? Variáveis soltas para todo lado. Sequer tem claro o número de alunos. E o CPF como um double é uma ideia ruim: você vai somar isso? Calcular algo? Não. E o RA? vai operar com ele? Não. Use char[].

 

Compare

 

typedef struct
{
    char   nome[50];
    char   sobrenome[50];
    char   email[50];
    char   cpf[15];
    char   ra[15];

}   Aluno;

 

Esse pode ser um aluno. Um só. E não é o alvo de seu programa. Mas

 

#define SIZE 30

typedef struct
{
    int   N;
    Aluno al[SIZE];

}   Cadastro;

 

Agora temos algo: antes mesmo de escrever qualquer código: está clara a existência de um cadastro, de alunos, com N alunos e uma capacidade de SIZE alunos.

 

E as operações com os dados?

 

void   cadastro();
void   pesquisa();
void   lista();
void   remover();

 

Isso é um desastre, como eu escrevi antes. Porque? Porque não terá controle de nada aí. E note que usou remover() mas usou cadastro()... Procure nomes mais uniformes. Ou cadastrar/remover ou remove/cadastra. Vai te salvar muitos minutos. Compare:

 

int         cadastrar(Aluno* a, Cadastro* cad);
int         listar(Cadastro* cad, const char* titulo);
int         pesquisar(char campo[15], char ra_cpf, Cadastro* cad);
int         remover(  char campo[15], char ra_cpf, Cadastro* cad);

 

O que muda? 

  • cadastrar() significa cadastrar um aluno em um cadastro. Pode ter vários cadastros, vários alunos, mas a mesma função. E tudo que a função conhece é 1 aluno e 1 cadastro. Seguro.
  • listar() lista qualquer cadastro, não um único vindo de sei lá onde. E já tem um prático título para mostrar no início. Bom para testar, e economiza: não precisa ficar escrevendo printf() toda hora. E como toda listagem de cadastro é feita do mesmo jeito o resultado é uniforme. Quer mudar? Muda em um lugar só: na função.
  • pesquisar e remover é a mesma coisa. No fundo é a mesma coisa que listar. Mas como estamos escrevendo em torno dos dados. usando RA e CPF como char[15] pode passar por exemplo 'C'ou 'R' no parâmetro seguinte para pesquisar ou remover por CPF ou RA no mesmo código. Código que a gente nem escreveu ainda.

Entenda que não tem uma única linha de programa de fato. Só os dados. Mas já se tem muita coisa definida.

 

E o menu?
 

int         menu();

 

menu()  retorna um int com a opção escolhida. Uma opção válida ou -1 para cancelar o programa. Simples assim. Mas inicialmente o programa não vai ter um menu. De nada serve. Não é esperto usar um programa interativo.

 

EXEMPLO

 

Um programa que não faz nada, mas mostra

 

Cadastro Exemplo tem 2 alunos.
    Nome do ultimo: "Dolly"

 

O código "todo"

 

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

#define SIZE 30

typedef struct
{
    char nome[50];
    char sobrenome[50];
    char email[50];
    char cpf[15];
    char ra[15];

} Aluno;

typedef struct
{
    int   N;
    Aluno al[SIZE];

} Cadastro;

int cadastrar(Aluno* a, Cadastro* cad);
int listar(Cadastro* cad, const char* titulo);
int pesquisar(char campo[15], char ra_cpf, Cadastro* cad);
int remover(char campo[15], char ra_cpf, Cadastro* cad);

int menu();

int main(void)
{
    Cadastro  um;
    Cadastro  cad[30];
    Cadastro* PC = NULL;
    Aluno     a;
    Aluno     b;
    Aluno     grupo[20];

    Aluno ex    = {.nome = "Jhonny", .ra = "123456-X"};
    Aluno outra = {
        "Dolly", "Parton", "DollyP@gmailcom", "123.456.789-12",
        "123456-7"};
    um.al[0]  = ex;
    um.al[1] = outra;
    um.N      = 2;
    printf( "\
Cadastro Exemplo tem %d alunos.\n\
    Nome do ultimo: \"%s\"\n",
        um.N, um.al[um.N - 1].nome
    );
    // lista os primeiros 10 cadastros do vetor
    // cad que tem 30 cadastros...
    for (int i = 0; i < 10; i += 1)
        listar(&cad[i], "Testando");
    return 0;
}

int cadastrar(Aluno* a, Cadastro* cad) { return 0; };
int listar(Cadastro* cad, const char* titulo) { return 0; };
int menu() { return 0; };
int pesquisar(char campo[15], char ra_cpf, Cadastro* cad) { return 0; };
int remover(char campo[15], char ra_cpf, Cadastro* cad) { return 0; };

 

Escrevi isso para tentar mostrar como endereçar os campos e como fica MUITO mais fácil controlar as coisas. Veja:

  • quantos cadastros tem no programa, incluindo vetores e ponteiros e tal
  • algumas maneiras de declarar e inicializar
  • a vantagem de tratar Aluno e Cadastro como unidade.
  • a função listar listando os alunos dos 10 primeiros cadastros de um vetor de 30, sem fazer diferença.

Escreva assim. É mais seguro e mais rápido.

 

 

 

 

 

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

@Dener Andrade

5 horas atrás, Dener Andrade disse:

quando eu aperto a tecla 2 pra listar, aparece na tela bem rápido e depois some,  vi que pra isso é utilizado o break,

não , o break serve para parar a execução de um determinado loop e sair de dentro do loop ,  switch  while  for  ,  e não sei se você já sabe , mas U comando para fazer uma pausa na execução do código , é o 

system("pause");; ; ;

ou  também pode ser usado esse  

getch() ;  ;    /// espera ate precionar alguma tecla do teclado 
                /// e prossegue sem precionar enter 

então na função de Listar todos coloque um comando para parar , e assim a listagem será mostrada na tela até teclar algo , 

void listar   ( int    );   /// coloque esse prootipo de funcao antes da int main

switch (op)
{
    case 1:
        c = cadastrar( c ); /// c eh contador de Linhas
        break;
    case 2:
        listar( c );        /// envie o contador para a funcao de listagem
                            /// para listar apenas o Que já foi cadastrado
        break;              /// finaliza o switch

/// funcao listar todos;;;
void listar( int c )
{
    int i;
    for (i = 0; i < c; i++)
    {
        if (cpf[i] > 0)
        {
            printf("\n Nome -------: %s\n\
                    \r Sobrenome --: %s\n\
                    \r Email ------: %s\n\
                    \r CPF --------: %s\n\
                    \r ra ---------: %s\n",
                     nome[i], sobrenome[i],
                     email[i],cpf[i], ra[i]);
        }
        else
        {
            break;
        }
    }
    if( i == 0 )
        printf("\n   não Tem NaDa Cadastrado . . . !");
    printf("\n\n\tTecle\n");
    getch();
}

 

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

Redes-Wi-Fi-capa-3d-newsletter.png

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!