Página 2 de 3 PrimeiroPrimeiro 123 ÚltimoÚltimo
+ Responder ao Tópico



  1. Citação Postado originalmente por megabertis Ver Post
    Deu tudo certo, agora vou fazer a função alterar, depois que estiver pronto eu posto o codigo pro pessoal puder ver. Muito obrigado.
    Agora quanto a questão do fflush(stdin) eu dei uma olhada nos links que vc postou, eu vi que pode ser usado o scanf para fazer a limpeza do buffer como no exemplo:

    Código :
    scanf(%c%*c",&string[i]);
    O %*c elimina o ultimo caracter que seria "\n"

    Minha dúvida é no caso de eu ter uma string do tipo char com conteudo "azul marinho", nessa string existe um espaço no meio e quando pesso atraves do scanf ele sempre dá problema quando existem espaços no meio das palavras.

    Teria como contornar esse problema?

    Quanto ao gets, eu não entendi direito, mas o que vi é para usar fgets no lugar, é isso?

    Mias uma vez obrigado meu camarada
    No site tem o exemplo. Usando o fgets, você lê x caracteres (evitando buffer overflow). Aí, você teria que fazer o parse (tipo, ir com um loop for na string, quando achar um "\n", parar e limpar o resto, e armazenar o resto num buffer se precisar). Manipular string/stdin em C eu acho meio chato por isso...

    Momento implantando a discordia: tem que ser em C? Nem c++ serve? C++ já tem a STL com quase tudo pronto, mais fácil. Mas se quiser continuar em C, terá que implementar uma classe de buffer se quiser ter mais praticidade. E uma de string também (que não dependa de '\0').
    Você deve estar no iníco hehe, já to pensando demais...
    No mais, se for permitido alguma lib, tenta achar. Deve ter umas header only, fica fácil incluir.
    Última edição por osmano807; 14-10-2010 às 16:00.

  2. Tenho que usar C mesmo pois essa máteria da faculdade só usa C, é logica de programação. Mas estou começando com java em outra máteria. A partir do ano que vem so java.

    Muito obrigado pela ajuda

    Depois eu posto o codigo pra vc dar uma olhada



  3. Citação Postado originalmente por megabertis Ver Post
    Tenho que usar C mesmo pois essa máteria da faculdade só usa C, é logica de programação. Mas estou começando com java em outra máteria. A partir do ano que vem so java.

    Muito obrigado pela ajuda

    Depois eu posto o codigo pra vc dar uma olhada
    É, to fazendo um curso também, tem C.
    Semestre que vem, se botarem java (vai ser, programação cliente/servidor, o povo não acha lógico usar bsd sockets), vai ser osso pra mim (linguagem fechada [ora, vou contar com uma ou outra v
    m livre ou com a oficial?], a sun/oracle bloqueando o download do meu ip, ...)
    Posta o source depois, vou dar uma olhada a fundo (preciso fazer um programa para o final do mês [professora chata ], se tu deixar e der certo, posso levar tua ideia pra frente)

  4. Terminei a função alterar, ai estava testando, tudo estava indo bem, so que agora esta ocorrendo o seguinte:

    EX: Cadastro um funcionario com a função incluir, depois vou pesquisar o mesmo com a função pesquisa, digito o nome que cadastrei tipo "bob", ele me mostra os dados do funcionario bob certinho, só que se eu realizar a pesquisa novamente e digitar so a letra b por exemplo que é a primeira letra do nome bob, ele me mostra os dados do funcionario bob quando deveria mostrar uma mensagem de funcionario não encontrado. Porque será?

    Outro problema que estou tendo é na função alterar, pesso para alterar o funcionario bob, ai ele mostra os dados de bob depois limpa os vetores e pede para incluir novos dados, funciona tudo certo. So que depois que fasso isso se eu utilizar a função pesquisa e colocar qualquer letra ele me mostra dados em branco. Porque será?

    Segue abaixo codigo para analize:

    Código c:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    //cria estrutura funcionario----------------------------------------------------
    struct funcionario
    {
        char nome[50];
        char endereco[100];
        char nascimento[10];
        char sexo[20];
        char telefone[20];
        char cargo[40];
    };
    typedef struct funcionario Fun;
    //------------------------------------------------------------------------------
    //Variaveis Globais-------------------------------------------------------------
    Fun cadastro[1000]; //total de inclusoes possiveis
    int conta = 0;     //auxiliar para o numero de inclusoes
    //------------------------------------------------------------------------------
    //função menu - cria interface com o usuário------------------------------------
    int menu()
    {
        int op;
     
        printf("----------------------------\n");
        printf("- Cadastro de Funcionarios -\n");
        printf("----------------------------\n");
        printf("- 1. Incluir               -\n");
        printf("- 2. Consultar             -\n");
        printf("- 3. Apagar                -\n");
        printf("- 4. Alterar               -\n");
        printf("- 5. Relatorio             -\n");
        printf("- 6. Sair                  -\n");
        printf("----------------------------\n");
        printf("Escolha uma opcao: ");
        fflush(stdin);
        scanf("%d",&op);    
        return op;
    }
    //------------------------------------------------------------------------------
    //função incluir - cadastra informações dos funcionarios------------------------
    void incluir()
    {
     
        system("cls");
        printf("Nome: ");
        fflush(stdin);
        gets(cadastro[conta].nome);
        printf("\n");
     
        printf("Endereco: ");
        fflush(stdin);
        gets(cadastro[conta].endereco);
        printf("\n");
     
        printf("Data de Nascimento: ");
        fflush(stdin);
        gets(cadastro[conta].nascimento);
        printf("\n");
     
        printf("Sexo: ");
        fflush(stdin);
        gets(cadastro[conta].sexo);
        printf("\n");
     
        printf("Telefone: ");
        fflush(stdin);
        gets(cadastro[conta].telefone);
        printf("\n");
     
        printf("Cargo: ");
        fflush(stdin);
        gets(cadastro[conta].cargo);
        printf("\n");
     
        conta++;
        return;
    }
    //------------------------------------------------------------------------------
    //funcao consultar - procura um funcionario no cadastro-------------------------
    void consultar()
    {
        int x;
        char aux[50];
        int achado = 0;
     
        system("cls");
        printf("Informe o nome do funcionario que deseja consultar: ");
        fflush(stdin);
        gets(aux);
        system("cls");
     
        for(x=0; x<conta; x++)
        {
            if(strstr(cadastro[x].nome,aux))
            {
                printf("Dados do Funcionario:\n\n");
                printf("Nome: %s\n\n",cadastro[x].nome);
                printf("Endereco: %s\n\n",cadastro[x].endereco);
                printf("Data de nascimento: %s\n\n",cadastro[x].nascimento);
                printf("Sexo: %s\n\n",cadastro[x].sexo);
                printf("Telefone: %s\n\n",cadastro[x].telefone);
                printf("Cargo: %s\n\n",cadastro[x].cargo);
                achado = 1;
                break;   
            }
        }
        if(!achado)
        printf("Nome nao encontrado\n\n");
        system("pause");
     
        return;
    }
    //------------------------------------------------------------------------------
    //funcao apagar - exlui um funcionario do cadastro------------------------------
    void apagar()
    {
        int x;
        char aux[50];
     
        system("cls");
        printf("Informe o nome do funcionario que deseja apagar: ");
        fflush(stdin);
        gets(aux);
        system("cls");
     
        for(x=0; x<conta; x++)
        {
            if(strstr(cadastro[x].nome, aux))
            {
                memset(cadastro[x].nome,0,sizeof(50));
                memset(cadastro[x].endereco,0,sizeof(100));
                memset(cadastro[x].nascimento,0,sizeof(10));
                memset(cadastro[x].sexo,0,sizeof(20));
                memset(cadastro[x].telefone,0,sizeof(20));
                memset(cadastro[x].cargo,0,sizeof(40));
                conta--;
     
                printf("Exclusao realizada\n\n");
                system("pause");
            }
        }
        return;
    }
    //------------------------------------------------------------------------------
    //funcao alterar - altera o cadastro de um funcionario--------------------------
    void alterar()
    {
        int x,i;
        char aux[50];
        int achado = 0;
     
        system("cls");
        printf("Informe o nome do funcionario que deseja alterar o cadastro: ");
        fflush(stdin);
        gets(aux);
        system("cls");
     
        for(x=0; x<conta; x++)
        {
            if(strstr(cadastro[x].nome,aux))
            {
                //imprime os dados
                system("cls");
                printf("Dados do Funcionario:\n\n");
                printf("Nome: %s\n\n",cadastro[x].nome);
                printf("Endereco: %s\n\n",cadastro[x].endereco);
                printf("Data de nascimento: %s\n\n",cadastro[x].nascimento);
                printf("Sexo: %s\n\n",cadastro[x].sexo);
                printf("Telefone: %s\n\n",cadastro[x].telefone);
                printf("Cargo: %s\n\n",cadastro[x].cargo);
                achado = 1;
                system("pause");
     
                //limpa os vetores
                memset(cadastro[x].nome,0,sizeof(50));
                memset(cadastro[x].endereco,0,sizeof(100));
                memset(cadastro[x].nascimento,0,sizeof(10));
                memset(cadastro[x].sexo,0,sizeof(20));
                memset(cadastro[x].telefone,0,sizeof(20));
                memset(cadastro[x].cargo,0,sizeof(40));
     
                conta--;
     
                //preenche os dados
                system("cls");
                printf("Nome: ");
                fflush(stdin);
                gets(cadastro[conta].nome);
                printf("\n");    
     
                printf("Endereco: ");
                fflush(stdin);
                gets(cadastro[conta].endereco);
                printf("\n");
     
                printf("Data de Nascimento: ");
                fflush(stdin);
                gets(cadastro[conta].nascimento);
                printf("\n");
     
                printf("Sexo: ");
                fflush(stdin);
                gets(cadastro[conta].sexo);
                printf("\n");
     
                printf("Telefone: ");
                fflush(stdin);
                gets(cadastro[conta].telefone);
                printf("\n");
     
                printf("Cargo: ");
                fflush(stdin);
                gets(cadastro[conta].cargo);
                printf("\n");
     
                conta++;
                printf("Alteracao realizada\n\n");
                break;
     
            }
        }
        if(!achado)
        printf("Nome nao encontrado\n\n");
        system("pause");
        return;
    }
    //------------------------------------------------------------------------------
    //funcao sair - finaliza o programa---------------------------------------------
    void sair()
    {
        system("cls");
        printf("Fim do programa\n\n");
        system("pause");
     
        return;
    }
    //------------------------------------------------------------------------------
    //funcao principal--------------------------------------------------------------
    int main(int argc, char *argv[])
    {
        int op;
     
        do
        {
            system("cls");
            op = menu(); //chama interface
     
            switch(op)
            {
                case 1:
                     incluir();
                     break;
     
                case 2:
                     consultar();
                     break;
     
                case 3:
                     apagar();
                     break;
     
                case 4:
                     alterar();
                     break;
     
                case 5:
                     system("cls");
                     printf("Total de funcionarios cadastrados: %d\n\n",conta);
                     system("pause");
                     break;
     
                case 6:
                     sair();
                     break;
     
                default:
                     system("cls");
                     printf("Opcao invalida\n\n");
                     system("pause");
                     system("cls");
                     break;
            }
        }while(op != 6);      
     
        return 0;
    }
    Se puder dar uma olhada e dar alguma dica eu agradeço.
    Última edição por osmano807; 15-10-2010 às 16:45.



  5. 1º: strstr é como um search mesmo, se tu só bota uma letra, ele vai mandar true se tiver essa letra na string.
    Para resultado exato, terá que usar str(n)cmp. Não usei ela a fundo (tá, não usei, c++, lembra?), então não sei muito dela. Mas pesquisa é com strstr, de todo modo, um 'b' é uma pesquisa válida...

    Agora, nos memset, acho que tu tá usando errado, experimente colocar só o valor da string, sem o sizeof.
    sizeof(50) = sizeof(int) = 4 bytes (c++ e no meu pc, em C deve ser a mesma coisa), aí só limpa os 4 primeiros caracteres...

    Eu particularmente não gosto de variáveis globais (por isso uso C++, classes), mas neste caso, na pior das doideras, dava para usar uma linked list, o problema é trabalhar com pointer e memória.
    No mais, vou tentar dar uma olhada, eu estou apostando naquela variável global ser o problema de não incluir.

    EDIT: não sei se vai rodar aqui, capaz que tu tá usando função só de máquina windows...
    EDIT2: ao invés de diminuir a variável conta na função alterar, deixe ela quieta, e continue usando a variável x. Você está só alterando, não está deletando realmente, só zerando os campos.
    Última edição por osmano807; 15-10-2010 às 16:48.






Tópicos Similares

  1. Dificultade em Cadastro
    Por isaquebrumel no fórum Servidores de Rede
    Respostas: 4
    Último Post: 28-12-2013, 07:54
  2. Estudo e Pesquisa em Engenharia de Telecomunicações
    Por telworld no fórum Assuntos não relacionados
    Respostas: 0
    Último Post: 30-11-2013, 19:57
  3. Menu Google De Resultado De Pesquisa Em Server Side Script X Sql
    Por tinario no fórum Servidores de Rede
    Respostas: 0
    Último Post: 23-06-2008, 15:25
  4. Formulario de cadastro em PHP
    Por no fórum Linguagens de Programação
    Respostas: 4
    Último Post: 03-05-2004, 23:52
  5. Problema em pesquisa no Forum
    Por PiTsA no fórum UnderLinux
    Respostas: 5
    Último Post: 13-02-2004, 13:06

Visite: BR-Linux ·  VivaOLinux ·  Dicas-L