Ir para conteúdo
Fórum Script Brasil

steel_sp

Membros
  • Total de itens

    20
  • Registro em

  • Última visita

Posts postados por steel_sp

  1. Não por ele mesmo. Mas o truque é executar um programa auxiliar, muito simples, que fecha o primeiro e o abre novamente, para se auto-finalizar em seguida.

    Mas se precisar de boot antes disso, o método convencional é usar a chave "RunOnce" do registro do Windows.

    Entendi. Mas acho que rodar um programa auxiliar iria ocupar memória à toa praticamente. E como é esse esquema de RunOnce?

    Valeu a ajuda!

  2. Nesse link, em "Aula 9 - Entradas e Saídas Padronizadas" tem algumas funções: http://www.mtm.ufsc.br/~azeredo/cursoC/c.html

    Basicamente, você tem que criar ou abrir um arquivo existente e escrever nele. Não é necessário criar vários arquivos. Nesse link acima tem alguns exemplos. Você também pode pesquisar por "agenda em C" no google que você acha alguma coisa.

  3. Valeu pelas dicas Maligno! Dei uma mexida no código e agora está alterando, porém sempre o segundo registro. Possui incluir 10 registro que ele sempre vai alterar o segundo. Olhe como ficou o código:

    altera_reg()
    {
        int i, j, x, chave_busca[11];
        char in_cpf=0, out_cpf[11];
        arquivo=fopen("cadastro.txt","r+b");
        if (arquivo==NULL)
        {
            puts("Erro ao abrir o arquivo!\n");
        }
        printf("\nDigite o CPF do cadastro que deseja alterar: ");
        for(i=0;i<11;i++)
         {
            if (((i-1) == 2)||((i-1) == 5)) printf(".");
            if ((i-1) == 8) printf("-");
            in_cpf = getch();
            while ((in_cpf<48) || (in_cpf>57))
            {
                in_cpf=getch();
            }
            putch(in_cpf);
            out_cpf[i]=in_cpf;
        }
        for(i=0;i<11;i++) chave_busca[i]=out_cpf[i]-48;
        fread(&dados,sizeof(dados),1,arquivo);
        while(!feof(arquivo))
        {
            for (i=0;i<11;i++)
            {
                if(dados.cpf[i]==chave_busca[i])
                {
                    fseek(arquivo,sizeof(dados),SEEK_CUR);
                    j=TRUE;
                }
            }
            fread(&dados,sizeof(dados),1,arquivo);
        }
        if (j!=TRUE) printf("\n\nCadastro não encontrado!");
        else
        {
        cont++;
        dados.code=cont;
        printf("\n\nNome: ");
        fflush(stdin);
        gets(dados.nome);
        printf("\nEndereco: ");
        fflush(stdin);
        gets(dados.ende);
        printf("\nTelefone: ");
        fflush(stdin);
        gets(dados.fone);
        printf("\nRG: ");
        fflush(stdin);
        gets(dados.rg);
        digitacpf();
        validacpf();
        for (x=0;x<11;x++) dados.cpf[x]=cpf[x];
        printf("\n\nAlteracao realizada com sucesso!\n\n");
        fseek(arquivo,sizeof(dados),SEEK_SET);
        fwrite(&dados,sizeof(dados),1,arquivo);
        fclose(arquivo);
        }
        sucess();
    }

  4. O código é em C mesmo.

    Na verdade o cpf foi declarado como char e convertido para inteiro para facilitar no cálculo do DV. Posteriormente vi que atrapalhou todo o resto.

    Esse esquema do 0x30 eu desconhecia, mas realmente funcionou!

    Por enquanto não estou tendo problemas com o cpf em int, mas quase certamente terei que convertê-lo para char.

    Agradeço a ajuda!

  5. Senhores, estou com um problema em um trecho de código aqui. Quando eu chamo a função para editar um registro em um arquivo .txt, ela aparentemente edita, porém apaga todos os outros registros. Creio que seja algum erro de lógica. Avaliem o código, por gentileza:

    altera_reg()
    {
        int i, j, x, chave_busca[11];
        char in_cpf=0, out_cpf[11];
        arquivo=fopen("cadastro.txt","rw");
        if (arquivo==NULL)
        {
            puts("Erro ao abrir o arquivo!\n");
        }
        printf("\nDigite o CPF do cadastro que deseja alterar: ");
        for(i=0;i<11;i++)
         {
            if (((i-1) == 2)||((i-1) == 5)) printf(".");
            if ((i-1) == 8) printf("-");
            in_cpf = getch();
            while ((in_cpf<48) || (in_cpf>57))
            {
                in_cpf=getch();
            }
            putch(in_cpf);
            out_cpf[i]=in_cpf;
        }
        for(i=0;i<11;i++) chave_busca[i]=out_cpf[i]-48;
        fread(&dados,sizeof(dados),1,arquivo);
        while(!feof(arquivo))
        {
            for (i=0;i<11;i++)
            {
                if(dados.cpf[i]==chave_busca[i])
                {
                    fseek(arquivo,sizeof(dados),SEEK_CUR);
                    j=TRUE;
                }
            }
            fread(&dados,sizeof(dados),1,arquivo);
        }
        if (j!=TRUE) printf("\n\nCadastro não encontrado!");
        else
        {
        arquivo=fopen("cadastro.txt","wb");
        if(arquivo==NULL) printf("\nErro ao abrir o arquivo: ");
        cont++;
        dados.code=cont;
        printf("\n\nNome: ");
        fflush(stdin);
        gets(dados.nome);
        printf("\nEndereco: ");
        fflush(stdin);
        gets(dados.ende);
        printf("\nTelefone: ");
        fflush(stdin);
        gets(dados.fone);
        printf("\nRG: ");
        fflush(stdin);
        gets(dados.rg);
        digitacpf();
        validacpf();
        for (x=0;x<11;x++) dados.cpf[x]=cpf[x];
        printf("\n\nAlteracao realizada com sucesso!\n\n");
        fwrite(&dados,sizeof(dados),1,arquivo);
        fclose(arquivo);
        }
    }

    Obrigado!

  6. Senhores, tenho uma variável chamada cpf[11] e declarada como inteiro. Preciso converter o valor contido nela em uma string. Por exemplo, o array {1,2,3,4,5} em uma string "12345".

    Como posso fazer isso?

    Quero fazer isso porque irei usar a variável cpf para fazer busca em arquivos, e vejo que se esta estiver em uma string facilitará meu trabalho.

    Obrigado desde já.

  7. Boa noite!

    Se dados.cpf for uma string, não há nada de errado! Mas o programa está esperando o usuário digitar algo que irá ser salvo em dados.cpf, algo que acredito desnecessário pois a função digitacpf já deve fazer isso, correto?

    Outra coisa: digitacpf e validacpf usa variáveis globais? Isso não é nada aconselhável, passe as variáveis como parâmetro!

    E evite usar gets, ela não limita o número de caracteres e portanto é muito fácil de se gerar um buffer overflow...

    Use fgets!

    Mande a declaração de struct agenda, pode ser útil! :)

    cpf é um array do tipo inteiro. Fiz o seguinte:

    dados.cpf=cpf
    Assim aparece a mensagem que o arquivo foi gravado com sucesso, porém nada é escrito nele. Por que será? E quanto a passagem de parâmetros, estava dando tantos problemas que eu declarei cpf como variável global. Se puder me dar um exemplo funcional, eu agradeço, assim eu tento novamente. Quanto ao struct, aqui está:
    struct agenda
    {
        char nome[40];
        char endereco[50];
        char fone[10];
        char rg[10];
        int cpf;
    };

    você deve estar provavelmente pegando uma string como cpf.... e scanf("%d",dados.cpf) pega um inteiro para dados.cpf, a variavel cpf da struct dados (dados.cpf) deve ser provavelmente do tipo char* , assim você deve usar "scanf("%s",dados.cpf);".

    Não, é do tipo inteiro mesmo. Era char, mas eu converti para int para poder fazer operações aritméticas e validar o CPF.

    ...

    Obrigado pelas respostas!

  8. Boa noite senhores. A função abaixo escreve os dados em um arquivo, porém está travando no "gets(dados.cpf)". Se troco o gets por um "scanf("%d",dados.cpf)" o programa fica simplesmente parado. Segue a função problemática:

    void novoreg()
    {
        char lixo[255];
        struct agenda dados;
        gets(lixo);
        fseek(arquivo,0,SEEK_END);
        printf("\nDigite os dados da pessoa nos campos abaixo:\n");
        printf("\nNome: ");
        gets(dados.nome);
        printf("\nEndereço: ");
        gets(dados.endereco);
        printf("\nTelefone: ");
        gets(dados.fone);
        printf("\nRG: ");
        gets(dados.rg);
        digitacpf();
        validacpf();
        gets(dados.cpf);
        fwrite(&dados, sizeof(struct agenda),1,arquivo);
        printf("\n\nRegistro adicionado com sucesso!\n");
    }

    Esclarecendo:

    1 - criei uma struct chamado agenda;

    2 - função digitacpf recebe um cpf em char e converte em int.

    3 - função validacpf confere se o cpf é válido ou não, fazendo os devidos cálculos.

    Onde está o erro?

  9. Só seguir os comentários:

    #include<stdio.h>
    #include<stdlib.h>
    
    main()
    {
      int vet[15],i,j,aux;
      srand(time(NULL)); // gera valores aleatórios a cada execução
      for (i=0;i<15;i++) // laço para gerar 15 valores
      {
          vet[i]=rand()%100; // atribui os valores gerados a 15 posições de um vetor
      }
      /* faz a ordenação, passando posição por posição. Se o valor que estiver a frente foi menor do que está
      atrás, então o troca-se de posição. Esse método é chamado de bolha. */
      for (i=0;i<15;i++)
      {
          for (j=i+1;j<15;j++)
          {
            if (vet[i]>vet[j])
            {
                aux=vet[i];
                vet[i]=vet[j];
                vet[j]=aux;
            }
          }
          printf("%d ", vet[i]); // imprimi o vetor com os valores já ordenados
      }
      printf("\n\nMaior valor: %d \nMenor valor: %d", vet[14], vet[0]); // a posição 0 contém o menor valor e posição 14 o maior valor
      getch();
    }

×
×
  • Criar Novo...