Ir ao conteúdo

Posts recomendados

Postado

#include <stdio.h>

#include <stdlib.h>

#include <iostream>

#include <string>

 

struct listaPacientes { // Nesse bloco estão definidos os campos necessários para cadastro dos pacientes.

//   int codigo;

     char nomePaciente[30]="";

     char cid[5]="";

     char cpf[14]="";

     char crm[5]="";

//   int hash;

     struct listaPacientes* prox;

};

 

typedef struct listaPacientes Pacientes; // Carregando a variável

Pacientes* inicializar (void) { // Função que inicializa a struct Pacientes.

 

return NULL;

}



 

Pacientes imprimir(Pacientes* l, char* cpf2) {

Pacientes* p;

printf("\n ************* LISTA DE PACIENTES ***********\n");

for(p = l; p != NULL; p = p){

// if (p){

     printf("Nome: %s\n", p->nomePaciente);

     printf("CID: %s\n", p->cid);

     printf("CRM: %s\n", p->crm);

     printf("CPF: %s\n", p->cpf);

//          }

            break;

}

printf("\n Fim imprimir!");

}

 

Pacientes* busca(Pacientes* l, char* cpf){

        Pacientes* p;

        printf("Chegou aqui");

        for (p = l; p != NULL; p = p) {

            if (p -> cpf == cpf)    

                printf("Chegou aqui!");

                return p;       

            

        }   

        return NULL;

}

 

Pacientes* inserir (listaPacientes* l, int i, char* nome, char* cid, char* crm, char* cpf) {

    printf("Entrou aqui!");

    printf("%s | %s | %s | %s", nome, cid, crm, cpf);

    Pacientes* p;

    char *cid2 = cid;

    printf("%s", &cid2);

            printf("FOR");

            Pacientes* novo = (Pacientes*) malloc(sizeof(Pacientes));

            novo->nomePaciente[14]=*nome;

            novo->cid[5]=*cid;

            novo->crm[5]=*crm;

            novo->cpf[14]=*cpf; 

            novo -> prox = l;           

            return novo;

 

    }

 

int main()

{

Pacientes* cadastro;

    cadastro=inicializar(); 

    int qtde=0;

    char opcao[14];

    char cpf[14], cid[3], crm[5], nome[30];

    int codHash=0;

    int codPaciente;

    char codOrigem[9]="";

    printf("Quantos pacientes deseja cadastrar?");

    scanf("%d", &qtde);

    

    for(int i=0; i<qtde; i++){  

        printf("\n Nome Paciente: ");

        scanf("%s", &nome);

        printf("\n CID: ");

        scanf("%s", &cid);

        printf("\n Codigo do Médico: ");

        scanf("%s", &crm);

        printf("\n CPF: ");

        scanf("%s", &cpf);

        printf("%s | %s | %s | %s", nome, cid, crm, cpf);

        cadastro = inserir(cadastro, i, nome, cid, crm, cpf);

    }

    printf("\nInforme o codigo do paciente para pesquisa: ");

    scanf("%s", &opcao);

    if (busca(cadastro, opcao) == NULL) {

        printf("\n\n- Paciente não encontrado\n");

   } else {

printf("\n\n- Paciente encontrado %d\n", codPaciente);

imprimir(cadastro, cpf);

}

printf("\n"); system("PAUSE");

}

  • Curtir 1
Postado

Supostamente o programa seria em C++ de acordo com o título do tópico e o fato do código incluir as bibliotecas <iostream> e <string> do C++, mas todo o resto do código está usando apenas recursos da linguagem C, não usa nenhum recurso próprio do C++.

 

Se usasse o tipo a classe string da linguagem C++, ao invés de usar vetor de char no estilo da linguagem C, poderia comparar usando ==, e atribuir usando = .

 

Mas se vai fazer o programa apenas com recursos do C, então faça o programa inteiro em C, ou seja não inclua bibliotecas do C++, e salve o código num arquivo com extensão .c (ao invés de .cpp), para que a IDE compile usando o compilador próprio da linguagem C.

Postado
 

Se usasse o tipo string da linguagem C++, ao invés de usar vetor de char no estilo da linguagem C, poderia comparar usando ==, e atribuir usando =

 

Olá!

 

Isso parece ser um programa de trabalho de faculdade, então é bom lembrar que:

  • Em C++ não existe o tipo string. string é uma classe, baseada no mesmo exato tipo char do C
  • Poder usar == para comparar strings em C++ não é assim de verdade. Essa é apenas uma cortesia da
    implementação da classe string, que redefine o operador == para na verdade usar string::compare(), não muito diferente do strcmp() do C. Na verdade todos os operadores são redefinidos, como > e <. Veja mais direto no manual em http://www.cplusplus.com/reference/string/string/operators/ 
  • Poder usar = em C++ para copiar string também não é assim uma atribuição simplesmente: uso provoca a execução do construtor de cópia da classe string

Essas são  situações para mostrar as diferenças entre essas linguagens, já que algumas coisas ficam meio escondidas...

 

Acertou o programa afinal?

 

ah, o link para a bíblia da classe string

  • Curtir 1
Postado

 

 

struct listaPacientes { // Nesse bloco estão definidos os campos necessários para cadastro dos pacientes.

//   int codigo;

     char nomePaciente[30]="";

     char cid[5]="";

     char cpf[14]="";

     char crm[5]="";

//   int hash;

     struct listaPacientes* prox;

};

Olá!

Agora se o espirito do Brian Kernighan não me engana, em C é impossível inicializar campos de struct (por razões que para mim são obvias, em C++ também não deveria).

 

Então, esse negocio "" depois da igualdade, e a própria igualdade, 'estão errados'.

Postado
 

 

Olá!

Agora se o espirito do Brian Kernighan não me engana, em C é impossível inicializar campos de struct (por razões que para mim são obvias, em C++ também não deveria).

 

Então, esse negocio "" depois da igualdade, e a própria igualdade, 'estão errados'.

 

Não.

 

No C++ struct e class são basicamente a mesma coisa, exceto que na struct os membros são públicos por padrão, mas na class os membros são privados por padrão, em ambos os casos precisando ser indicado quais membros da estrutura não seguem especificação padrão. Então, no C++, tudo que é aceitável em uma class também é numa struct, ou seja pode ter membros públicos, privados e protegidos, ter funções membras, usar herança, e fazer atribuições como nesse caso.

 

Mas já que struct e class fazem basicamente a mesma coisa no C++, é recomendado por convenção usar a struct apenas como uma estrutura de dados simples clássica do C (sem fazer atribuições, sem funções membro ou inclusão de membros privados), e class como estrutura de dados com todas as propriedades inerentes da Orientação a Objetos, isso para permitir compatibilidade de interface com bibliotecas programadas em C, pois nesse caso é especificado que a struct do C++ deverá se comportar de forma idêntica a uma struct do C.

  • Confuso 1
Postado
 

No C++ struct e class são basicamente a mesma coisa

Não tenho preconceito com nada, somente com coisa que são ditas: basicamente a mesma coisa.

Postado
1 hora atrás, vangodp disse:

isrnick está correto

Está!

 

Infelizmente isso é C++, que é basicamente C, porém não é C. Foi nisso que pensei desdo começo quando falei ...

 

18 horas atrás, AnsiC disse:

Agora se o espirito do Brian Kernighan não me engana, em C é impossível inicializar campos de struct (por razões que para mim são obvias, em C++ também não deveria).

também não deveria , mas podemos isso que eu disse daí @isrnick fez sua interpretação.

 

Inclusive vejam logo abaixo que eu coloquei entre aspas simples 'estão errados'. 

18 horas atrás, AnsiC disse:

Então, esse negocio "" depois da igualdade, e a própria igualdade, 'estão errados'.

Apenas porque em C não estaria certo.

 

Enquanto ...

11 horas atrás, AnsiC disse:

Não tenho preconceito com nada, somente com coisa que são ditas: basicamente a mesma coisa.

Ou é, ou não é. Acredito que C++ lhe deu uma struct classe, que de struct basicamente só tem o nome. 

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