Ir para conteúdo
Fórum Script Brasil
  • 0

Problema em leitura e escrita de struct


steel_sp

Pergunta

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?

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

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

Link para o comentário
Compartilhar em outros sites

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

Editado por steel_sp
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...