Ir ao conteúdo
  • Cadastre-se

C Erro ao impimir informação no arquivo de texto


GustavoMarchesim
Ir à solução Resolvido por devair1010,

Posts recomendados

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#define SIZE 100

void Cadastro();
void Listar();
void Principal();

struct VarG{
    int Op;
    char Cd;
};

struct Cadastro {
    char nome[SIZE];
    char cpf[SIZE];
    int idade[SIZE];
    char telefone[SIZE];
    char email[SIZE];
    int CEP[SIZE];
    char estado[SIZE];
    char cidade[SIZE];
    char bairro[SIZE];
    char comorbidade[SIZE];
    char quais[SIZE];
};

FILE *DB;

struct VarG Global;
struct Cadastro Paciente;

    int main(){

    char login[15] = "123";
    char login1[15];
    char senha[15] = "123";
    char senha1[15];        
    int login_efetuado = 0;

    while(!login_efetuado){
        printf("Digite o Login: ");
        scanf("%s", login1);

        printf("Digite a Senha: ");
        scanf("%s", senha1);

        if (strcmp(login, login1) == 0 && strcmp(senha, senha1) == 0){
            printf("\n\nLOGADO!\n\n");
            login_efetuado = 1;
            sleep(1);
            Principal();
        }
        else
            printf("\n\nDADOS INVALIDOS!\n\n");    
    }

}

    void Cadastro(){

        int risco = 0;

        system("clear");
        DB = fopen("ficha_cadastral.txt", "a");

        if(DB == NULL){
            printf("\nErro no Banco de Dados....\n");
            return 1;
        } else {
            printf("\n\t\t\t================================");
            printf("\n\t\t\t        FICHA CADASTRAL         ");
            printf("\n\t\t\t================================");
            printf("\n\n");
            printf("\nDigite o nome completo do paciente: ");
            fflush(stdin);
            fgets(Paciente.nome, 50, stdin);

            printf("\nDigite o CPF do paciente: ");
            fflush(stdin);
            fgets(Paciente.cpf, 15, stdin);

            printf("\nDigite a Idade do paciente: ");
            fflush(stdin);
            fgets(Paciente.idade, 25, stdin);

            printf("\nDigite o Telefone do Paciente: ");
            fflush(stdin);
            fgets(Paciente.telefone, 15, stdin);

            printf("\nDigite o Email do paciente: ");
            fflush(stdin);
            fgets(Paciente.email, 50, stdin);

            printf("\nDigite o CEP do paciente: ");
            fflush(stdin);
            fgets(Paciente.CEP, 10, stdin);

            printf("\nDigite o Estado do paciente: ");
            fflush(stdin);
            fgets(Paciente.estado, 25, stdin);

            printf("\nDigite a Cidade do paciente: ");
            fflush(stdin);
            fgets(Paciente.cidade, 25, stdin);

            printf("\nDigite o Bairro do paciente: ");
            fflush(stdin);
            fgets(Paciente.bairro, 35, stdin);

            printf("\nO Paciente possui comorbidades ? 1. Sim / 0. Não:  ");
            scanf("%d", &risco);
            setbuf(stdin, NULL);
                
         if(risco == 1){
            strcpy(Paciente.comorbidade, "SIM");
            printf("Quais? ");

            fflush(stdin);
            fgets(Paciente.quais, 200, stdin);
        }else{
            strcpy(Paciente.comorbidade, "Nenhuma");
            strcpy(Paciente.quais, "Nenhuma");
        }
            
            system("clear");
            printf("\n=================================\n");
            printf("Finalizar cadastro ? [s/n]: ");
            scanf("%c", &Global.Cd);

            if(Global.Cd == 's', 'S'){
                fprintf(DB, "\nNome: %s\nIdade: %s\nCPF: %s\nTelefone: %s\nEmail: %s\nCEP: %s\nEstado: %s\nCidade: %s\nBairro: %s\nComorbidade: %s\nQuais Comorbidades: ", Paciente.nome, Paciente.idade, Paciente.cpf, Paciente.telefone, Paciente.email, Paciente.CEP, Paciente.estado, Paciente.cidade, Paciente.bairro, Paciente.comorbidade, Paciente.quais);
                fprintf(DB, "\n================================\n");

                fclose(DB);

                system("clear");
                printf("########################\n");
                printf("#  CADASTRO CONCLUIDO  #\n");
                printf("########################\n");

                sleep(1);
                Principal();

            } else if(Global.Cd == 'n', 'N') {
                system("clear");
                printf("CADASTRO CANCELADO.\nVoltando ao Menu Principal...\n");
                fclose(DB);
                getchar();
                sleep(1);
                Principal();

            } else {
                printf("Valor inválido. Tente Novamente....\n");
                fclose(DB);
                sleep(1);
                Cadastro();
            }
        }
    }

    void Listar(){
        system("clear");
        DB = fopen("ficha_cadastral.txt", "r");

        if(DB == NULL){
            printf("\nErro no Banco de Dados...\n");
            return 1;
        } else {
            printf("==========================\n");
            printf("     LISTA DE PACIENTES   \n");
            printf("==========================\n");

            char listagem[250];

            while(fgets(listagem, 250, DB) != NULL){
                printf("%s\n", listagem);
            }

            fclose(DB);

            printf("\nVoltar ao Menu Principal? [s/n]\n");
            scanf("%c", &Global.Cd);

            if (Global.Cd == 's'){
                Principal();


            } else if(Global.Cd != 's' && Global.Cd != 'n') {
                printf("Valor inválido.\nVoltando ao Menu Principal...\n");
                sleep(1);
                Principal();

            }

        }

    }

    void Principal(){

        system("clear");
        printf("\n");
        printf("\n\t\t\t==================================");
        printf("\n\t\t\t*       SISTEMA DE CADASTRO      *");
        printf("\n\t\t\t==================================\n");
        printf("\n\t\t\t ( 1 ) Cadastrar Pacientes");
        printf("\n\t\t\t ( 2 ) Alterar Pacientes");
        printf("\n\t\t\t ( 3 ) Listar Pacientes");
        printf("\n\t\t\t ( 0 ) Fechar programa");
        printf("\n\n\n\t\t\t Opcao Desejada: ");
        scanf("%d", &Global.Op);
        getchar();

        switch(Global.Op) {
            case 1:
                Cadastro();
                break;
            case 2:
                system("clear");
                printf("\n=======================================================\n");
                printf("Para alterar os dados de um cadastro, acesse o\narquivo ");
                printf("ficha_cadastral.txt e altere manualmente via editor de texto");

                printf("\nVoltar ao Menu Principal? [s/n]: ");
                scanf("%c", &Global.Cd);

                if(Global.Cd == 's') {
                Principal();

            }   else if(Global.Cd != 's' && Global.Cd != 'n') {
                printf("Valor inválido.\nVoltando ao Menu Principal...\n");
                sleep(1);
                Principal();

            }

            break;

            case 3:
                Listar();
                break;
            }
    }

Olá pessoal, estou com um problema no meu projeto, se puderem ver o código acima, na ficha cadastral é perguntado ao usuario sobre comorbidades e atribui valores em caso afirmativo e negativo em teoria, mas não funciona como deveria. Alguém pode me ajudar ?

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

  • Solução

@GustavoMarchesim   essa sintaxe desse comando if não funcione assim como você colocou ,

/// if(Global.Cd == 's', 'S')   syntaxe errada
if(Global.Cd == 's' || Global.Cd == 'S')
{
    fprintf(DB,"\nNome ---------------: %s\n\
                \rIdade --------------: %s\n\
                \rCPF ----------------: %s\n\
                \rTelefone -----------: %s\n\
                \rEmail --------------: %s\n\
                \rCEP ----------------: %s\n\
                \rEstado -------------: %s\n\
                \rCidade -------------: %s\n\
                \rBairro -------------: %s\n\
                \rComorbidade --------: %s\n\
                \rQuais Comorbidades -: %s\n\
                \r================================\n" , 
                Paciente.nome   , Paciente.idade      , 
                Paciente.cpf    , Paciente.telefone   , 
                Paciente.email  , Paciente.CEP        ,  
                Paciente.estado , Paciente.cidade     , 
                Paciente.bairro , Paciente.comorbidade, 
                Paciente.quais  
           );

 

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

2 horas atrás, GustavoMarchesim disse:
void Cadastro();
void Listar();
void Principal();

 

Não use isso.

 

Você tem um livro? Uma apostila? Qual é? Recomendo muito ter um livro ou dois e ler alguns programas de outros. E ler o manual. Usa linux? Tem um bom IDE?

 

Não use void(void) ou void(). Isso é um buraco negro. Só vai te trazer problemas. Use argumentos, parâmetros. 

 

Escreva em torno dos dados.

 

2 horas atrás, GustavoMarchesim disse:
struct VarG Global;
struct Cadastro Paciente;

    int main(){

 

Não crie nada global. É proibido em toda parte, escolas e empresas. E é um desastre.

 

Seu cadastro é uma coleção de pacientes então escreva como tal e seu programa vai de imediato ficar muito mais fácil.

 

Um exemplo do problema de não escrever em torno dos dados:

 

struct Cadastro {
    char nome[SIZE];
    char cpf[SIZE];
    int idade[SIZE];
    char telefone[SIZE];
    char email[SIZE];
    int CEP[SIZE];
    char estado[SIZE];
    char cidade[SIZE];
    char bairro[SIZE];
    char comorbidade[SIZE];
    char quais[SIZE];
};

 

 

Isso nem é um cadastro. É apenas um paciente. Só um.

 

2 horas atrás, GustavoMarchesim disse:
struct VarG Global;
struct Cadastro Paciente;

 

Pois é. Isso que escreveu é uma série de vetores e para ter acesso a um paciente tem que usar a posição dentro do vetor... O terceiro paciente tem nome nome[2] e comorbidade comorbidade[2].

 

Isso não serve de nada. Para listar um paciente numa função por exemplo ou você passa o "cadastro" todo ou recorta todos os campos de novo e cria uma função com 11 parâmetros?

 

Não escreva assim. Não vai ter uma boa nota ou um bom trabalho ;) 

 

EXEMPLO

 


#define SIZE 10

typedef struct
{
    char nome[30];
    char cpf[15];
    int  idade;
    char telefone[15];
    char email[30];
    int  CEP[10];
    char estado[3];
    char cidade[30];
    char bairro[30];
    char comorbidade[30];
    char quais[30];

} Paciente;

typedef struct
{
    unsigned tamanho;
    unsigned N;  // quantos agora?
    Paciente pac[SIZE];

} Cadastro;

int cadastrar(Paciente* p, Cadastro* cad);
int listar(Cadastro* C);

int main(void) { return 0; }

int cadastrar(Paciente* p, Cadastro* cad) { return 0; }

int listar(Cadastro* C) { return 0; }

 

Isso é mais próximo da sua realidade. O cadastro tem pacientes. Os pacientes tem seus dados. Juntos.

 

Veja como cadastrar um paciente é mais simples:

 

    int cadastrar(Paciente* p, Cadastro* cad) { return 0; }

 

cadastrar significa inserir o paciente p no cadastro cad. Só isso. Isso é o comum.

 

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

3 horas atrás, arfneto disse:

Você tem um livro? Uma apostila? Qual é? Recomendo muito ter um livro ou dois e ler alguns programas de outros. E ler o manual. Usa linux? Tem um bom IDE?

Olá, então... Os únicos livros que possuo são os de referencia da Universidade que não sei dizer se são bons. Eu sou iniciante em programação de maneira geral e estou bem perdido, se puder me indicar um livro ou dois eu ficaria feliz. Obrigado pelo retorno e pelas dicas!!!

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!