Ir ao conteúdo
  • Cadastre-se
Peterson Vale

C++ Estou com esse problema, no meu codigo... preciso saber porque não esta funcionand!!

Posts recomendados

#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

Compartilhar este post


Link para o post
Compartilhar em outros sites

você está manipulando as strings de forma errada.

Para comparar strings, não use "==", use a função strcmp. 

Para copiar o conteúdo de um string não use "=", use strcpy.

http://www.cplusplus.com/reference/cstring/strcmp/

http://www.cplusplus.com/reference/cstring/strcpy/

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites
 

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

 

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

Compartilhar este post


Link para o post
Compartilhar em outros sites
 

 

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

Compartilhar este post


Link para o post
Compartilhar em outros sites
 

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.

  • Confuso 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
9 horas atrás, AnsiC disse:

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

isrnick está correto. Classes e structs são em essência a mesma coisa(EM C++ XD). Para se fazer uma ideia, você pode usar construtores destrutores, listas de inicialização, etc, todos os mecanismos das classes, faça a prova. O único que muda é que por default os dados de uma struct são públicos.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
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. 

Compartilhar este post


Link para o post
Compartilhar em outros sites
6 horas atrás, AnsiC disse:
7 horas 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 ...

Pode que no começo C++ fosse uma extensão de C, mas já faz um bom tempo que isso mudou. A linguagem foi completamente reescrita tomando corpo e alma próprio.

De uma olhada por exemplo na Wikipedia. Na parte denominada "A evolução da linguagem" existe um parágrafo que diz o seguinte:
"Por muito tempo, o C++ foi encarado como um superconjunto do C.[nota 1] Entretanto, em 1999 o novo padrão ISO para a linguagem C tornou as duas linguagens ainda mais diferentes entre si. Devido a essas incompatibilidades, muitas empresas que desenvolvem compiladores não oferecem suporte à versão mais recente da linguagem C."

E se ainda não ficou claro vai para a parte denominada "Incompatibilidade com C" onde diz claramente o seguinte:
"É incorreto considerar o C++ como um super conjunto de C, isto é, uma linguagem que implementa o C completamente e que adiciona novas funcionalidades.[25] Grande parte de código C pode ser perfeitamente compilado em C++...". Essa parte em que C pode ser compilado em C++ é matadora né XD

O que vem a dizer que C++ suporta algo de C e não o contrario. Por isso cada linguagem tem seu próprio compilador.

Uma pergunta... Por que manter compatibilidade com C? Que ganhamos com isso? Obviamente não foi o Brian Kernighan quem escreveu C++ e sim Bjarne Stroustrup. Para manter tanta compatibilidade com C, está a própria C. Por que não pode se melhorar C++, porque C++ tem que ser fiel a C? Onde está escrito isso?

O fato é que hoje em dia C++ já cortou o cordão umbilical com C faz um bom tempo, o que ocorre é que tem muitos puristas como você que ainda não conseguem digerir isso, porque C realmente é eficiente e com ele você pode escrever praticamente qualquer programa, mas essa é a realidade, outra coisa é que seja efetivo escrever certos programas com C, mas não se preocupe, isso também acontece com C++ e java, e html, php, python....

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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...

GRÁTIS: minicurso “Como ganhar dinheiro montando computadores”

Gabriel TorresGabriel Torres, fundador e editor executivo do Clube do Hardware, acaba de lançar um minicurso totalmente gratuito: "Como ganhar dinheiro montando computadores".

Você aprenderá sobre o quanto pode ganhar, como cobrar, como lidar com a concorrência, como se tornar um profissional altamente qualificado e muito mais!

Inscreva-se agora!