Ir ao conteúdo
  • Cadastre-se

C Como armazenar numeros corretamente em um arquivo txt


Heisenbeck
Ir à solução Resolvido por KXSY,

Posts recomendados

Olá, sou novo por aqui. Preciso desenvolver um programa de cadastro, porém ao salvar em arquivo txt, quando eu vou abrir o arquivo os valores "int idade" e "int CPF" aparece uma sequencia aleatoria de numeros. Segue um print do arquivo abaixo.

obs.: Ja tentei utilizar; int, "%d" e char "%s"

 

Outro problema é, ao fazer um cadastro ao termino dele dá a opção de fazer um novo cadastro, porém quando se faz isso um cadastro esta escrevendo em cima do anterior 

 

Cadastrar() {
#define SIZE 50

    char nome[SIZE][50];
    int idade[SIZE][3];
    char sexo[SIZE][12];
    int CPF[SIZE][15];
    char telefone[SIZE][15];
    int COD[SIZE][15];
    int op;
    FILE* pacientes; // Ponteiro para arquivo

    pacientes = fopen("arquivo_pacientes.txt", "a");
    printf("\n\t\tTELA DE CADASTRO DE PACIENTES ");
    static int linha;
    if (pacientes == NULL) {
        printf("Erro! O arquivo nao foi aberto! \n");
    }
    else {
        do {
            printf("\n\nDigite o nome do paciente: ");
            scanf("%s", &nome[linha]);
            fflush(stdin);
            printf("\nDigite a idade: ");
            scanf("%d", &idade[linha]);
            fflush(stdin);
            printf("\nDigite o sexo: ");
            scanf("%s", &sexo[linha]);
            fflush(stdin);
            printf("\nDigite o CPF: ");
            scanf("%d", &CPF[linha]);
            fflush(stdin);
            printf("\nDigite o telefone: ");
            scanf("%s", &telefone[linha]);
            fflush(stdin);
            fprintf(pacientes, "%s\n", nome); 
            fprintf(pacientes, "%d\n", idade);
            fprintf(pacientes, "%s\n", sexo);
            fprintf(pacientes, "%d\n", CPF);
            fprintf(pacientes, "%s\n\n", telefone);
            printf("\n\nDados gravados com sucesso!!\n");
            printf("\nDigite 1 para continuar ou outro valor para finalizar.");
            scanf("%d", &op);
            linha++;
        } while (op == 1);
        fclose(pacientes); // fclose para fechar o arquivo
    }
}

 

error.jpg

Link para o comentário
Compartilhar em outros sites

  • Solução

Há muitas coisas erradas no seu código, como isso aqui

36 minutos atrás, Heisenbeck disse:

scanf("%d", &CPF[linha]);

não vai fazer o que você pretende, isso só vai pegar um numero de até 10 casas decimais.

 

Eu não vou apontar todos os seus erros, ao invés disso vou deixar um exemplo funcionando.

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


/* Constantes */
#define N_ARQ "cadastros.txt"

#define T_NOME 30
#define T_CPF 10
#define T_TELEFONE 15

/* Definições */
struct dados_paciente
{
    char nome[T_NOME];
    unsigned char idade;
    char sexo;  /* Oh yeah! */
    char cpf[T_CPF];
    char telefone[T_TELEFONE];
};

int main(void)
{
    struct dados_paciente paciente;
    
    /* Cria o arquivo */
    FILE *arq = fopen(N_ARQ, "w+");
    if (arq == NULL) {
        /* Erro */
        perror("Não foi possível cria o arquivo!");
        exit(EXIT_FAILURE);
    }
    
    /* Pede as informaçẽos do paciente */
    printf("\nDigite o nome do paciente:\t");
    fgets(paciente.nome, T_NOME, stdin);
    printf("\nDigite a idade do paciente:\t");
    scanf("%hhu%*c", &paciente.idade);
    printf("\nDigite o sexo do paciente:\t");
    scanf("%c%*c", &paciente.sexo);
    printf("\nDigite o CPF do paciente:\t");
    fgets(paciente.cpf, T_CPF, stdin);
    printf("\nDigite o numero de telefone do paciente:\t");
    fgets(paciente.telefone, T_TELEFONE, stdin);
    
    /* Grava as informaçẽos no arquivo */
    fprintf(arq, "Nome:%s", paciente.nome);
    fprintf(arq, "Idade:%hhu\n", paciente.idade);
    fprintf(arq, "Sexo:%c\n", paciente.sexo);
    fprintf(arq, "CPF:%s", paciente.cpf);
    fprintf(arq, "Telefone:%s", paciente.telefone);
    
    /* Fecha o arquivo */
    return(0);
}

De uma olhada no exemplo, qualquer duvida e só perguntar.

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

Sim, porque você tem que verificar se o arquivo existe antes de escrever no mesmo.

Exemplo

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

int main(void)
{
    char frase[40];
    /* Abre o arquivo */
    FILE *arq = fopen("texto.txt", "a+");
    if (arq == NULL) {
        /* Se o arquivo não existir tenta cria-lo */
        arq = fopen("texto.txt", "w+");
        if (arq == NULL) {
            /* Se não for possível criar o arquivo, então apresenta um erro */
            perror("Nao foi possivel criar o arquivo");
            exit(EXIT_FAILURE);
        }
    }
    
    printf("\nDigite uma frase para se gravada em um arquivo texto.\n:\t");
    fgets(frase, 40, stdin);
    
    /* Grava no arquivo */
    fprintf(arq, "%s", frase);
    /* Fecha o arquivo */
    fclose(arq);
    return(0);
}

 

  • Curtir 1
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...