Ir ao conteúdo
  • Cadastre-se

C++ Erro ao compilar registro de pacientes


Icaroms

Posts recomendados

Quando vai fazer as leituras da variáveis o compilador fecha logo após o nome do paciente

alguém sabe me dizer o por que desse erro?

 

Citação

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#define TAM 3

int i;

typedef struct DadosPaciente{
    char  nome[30];
    float cpf;
    int   sus;
    char  endereco;
    float contato;
    char  tiplano;
}tDadosPaciente;

tDadosPaciente Id[TAM];

main(){
    int op; 
    
    do{
        printf (" \n\n1 - Cadastrar Novo Paciente \n");
        printf ("0 - Sair \n\n");
        printf ("Escolha uma opcao! \n");
        scanf  ("%d", &op);
        
        switch (op){
            case 1:
                leitura();
                exibe_tela();
            break;
            
            case 0:
                printf ("Obrigado pela visita! \n");
                exit (0);
            break;
            
            default:
                printf ("Opcao Invalida!");
                getch();
            break;
        }
    }while ( op != 0 );
    
    return 0;
}

leitura (tDadosPaciente *Id){
    for (i=0;i<TAM;i++){
        if (i == 4){
            printf ("Tamanho maximo pre-definido para ate 3 cadastro.");
        }else{
            do{
                fflush (stdin);
                printf ("\n\nNome do Paciente:\n");
                scanf  ("%s", &Id.nome);
                printf ("CPF do Paciente\n:");
                scanf  ("%f", &Id.cpf);
                printf ("N SUS do Paciente\n:");
                scanf  ("%d", &Id.sus);
                printf ("Endereco do Paciente\n:");
                scanf  ("%s", &Id.endereco);
                printf ("Contato do Paciente\n:");
                scanf  ("%f", &Id.contato);
                printf ("Plano do Paciente\n");
                scanf  ("%s", &Id.tiplano);
                
                printf ("Deseja Cadastrar Mais um Paciente (S/N)?\n");
            }while (getche () == 's');                                        // acho que esse while nao vai funcionar, ele sempre vai ter o mesmo numero p i 
        }
    }
}

exibe_tela (tDadosPaciente *Id){
    for (i=0;i<TAM;i++){
        printf ("Nome: %s", Id.nome);
        printf ("CPF:  %f", Id.cpf);
        printf ("Numero SUS: %d", Id.sus);
        printf ("Endereco: %f", Id.endereco);
        printf ("Contato: %f", Id.contato);
        printf ("Plano do Paciente %s", Id.tiplano);
    }
}
 

 

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

@Icaroms seu código está bom , mas você esqueceu de colocar em qual posição do vetor você está armazenando os dados , e também você colocou as variáveis endereco e tiplano como char simples e na hora de fazer a leitura dessas variáveis você colocou  para ler string , e quando vai imprimir vai imprimir string e é um char dá erro e o programa fecha . . . ! ,  então seu programa com algumas modificações poderia ser assim  :

#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#include <string.h>
#define TAM 3

/*             0     1    2     3   4      5      6      7         8                         */
typedef enum{BLACK,BLUE,GREEN,CYAN,RED,MAGENTA,BROWN,LIGHTGRAY,DARKGRAY,   /* nome das cores */
LIGHTBLUE,LIGHTGREEN,LIGHTCYAN,LIGHTRED,LIGHTMAGENTA,YELLOW,WHITE} COLORS;
/*  9         10         11        12        13         14    15                             */

static int __BACKGROUND = 1/*BLACK*/;/*pode ser o numero ou o nome da cor*/
static int __FOREGROUND = LIGHTGRAY;

void textcolor (int letras, int fundo){/*para mudar a cor de fundo mude o background*/
    __FOREGROUND = letras;
    __BACKGROUND = fundo;
    SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),
    letras + (__BACKGROUND << 4));
}
                  /* y = linha de 0 a 24 , x = coluna de 0 a 80 */
void gotoxy(int x, int y){/*imprimir na linha e coluna desejada */
  COORD c;
  c.X = x;
  c.Y = y;
  SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), c);
}
int som(int f){
    Beep(f,150);/* primeiro a frquência depois o tempo de duração do som */
    return 0;
}

int i,cont;

typedef struct DadosPaciente{
    char  nome[30];
    int   sus;
    char  endereco[30];
    float contato , cpf;
    char  tiplano[30];
}tDadosPaciente;

tDadosPaciente Id[TAM];

void leitura (/*tDadosPaciente *Id*/){
    char op;
    textcolor(10,0);
    printf ("Tamanho maximo pre-definido para ate 3 cadastro.");
    do{
        printf ("\n\nNome do Paciente -----: ");
        fflush (stdin                         );
        scanf  ("%s", &Id[cont].nome          );
        printf ("CPF do Paciente ------: "    );
        fflush (stdin                         );
        scanf  ("%f", &Id[cont].cpf           );
        printf ("N SUS do Paciente ----: "    );
        fflush (stdin                         );
        scanf  ("%d", &Id[cont].sus           );
        printf ("Endereco do Paciente -: "    );
        fflush (stdin                         );
        scanf  ("%s", &Id[cont].endereco      );
        printf ("Contato do Paciente --: "    );
        fflush (stdin                         );
        scanf  ("%f", &Id[cont].contato       );
        printf ("Plano do Paciente ----: "    );
        fflush (stdin                         );
        scanf  ("%s", &Id[cont].tiplano       );
        printf ("Deseja Cadastrar Mais um Paciente (S/N)? ");
        op=getche(                            );
        if(cont<3)cont++;/* cont se refere a quantidade de posições no struct , nesse caso so pode ate 3*/
        else op='n'                            ;
    }while (toupper(op) == 's'                ); 
    printf("\n\n"                             );    
    textcolor(14,0                            );                                   
    // acho que esse while nao vai funcionar, ele sempre vai ter o mesmo numero p i
}
void exibe_tela (/*tDadosPaciente *Id*/){
    textcolor(15,0     );
    int op=0,p=0        ;
    for (i=0;i<cont;i++){
        printf ("Nome --------------: %s  \n", Id[i].nome    );
        printf ("CPF ---------------: %.2f\n", Id[i].cpf     );
        printf ("Numero SUS --------: %d  \n", Id[i].sus     );
        printf ("Endereco ----------: %.2f\n", Id[i].endereco);
        printf ("Contato -----------: %.2f\n", Id[i].contato );
        printf ("Plano do Paciente -: %s\n\n", Id[i].tiplano );
    }
    printf("       Tecle"          );
    do{
        gotoxy(10,24               );
        if     (p==0)printf("|"    );
        else if(p==1)printf("/"    );
        else if(p==2)printf("-"    );
        else if(p==3)printf("%c",92);
        p++                         ;
        if(p>3)p=0                  ;
        if(kbhit())op = getch(     );
        Sleep(100                   );
        /*som(p*300+500              );*/
    }while(op == 0                 );
    textcolor(14,0                 );
    system("cls"                   );
}
int main(){
    int op;
    do{
        textcolor(14,0);
        gotoxy(10,2);printf ("0 - Sair"                     );
        gotoxy(10,3);printf ("1 - Cadastrar Novo Paciente\n");
        gotoxy(10,5);printf ("Escolha uma opcao ! "         );
        textcolor(11,0                                      );
        gotoxy(10,2);printf("0"                             );
        gotoxy(10,3);printf("1"                             );
        gotoxy(30,5                                         );
        scanf  ("%d", &op                                   );
        textcolor(14,0                                      );
        switch (op){
        case 1             :
            leitura(      );
            exibe_tela(   );
            break          ;
        case 0             :
            textcolor(15,0);
            gotoxy(10,7);
            printf ("Obrigado pela visita ");
            for(op=0;op<10;op++){
                printf(". "     );
                Sleep(150       );
                som(op*200+500  );
            }
            printf("!"          );
            Sleep(300           );
            exit (0             );
            break                ;
        default                  :
            textcolor(15,0      );
            printf ("Opcao Invalida . . . !     Tecle");
            getch(              );
            break                ;
        }
    }while ( op != 0            );
    return 0                     ;
}

 

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!