• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

porche111

[ajuda] urgente exercicio c++

3 mensagens neste tópico

boas, precisava de uma ajudinha. Eu tenho que acabar o programa hj para entregar por mail ao stor.

o programa é este:

#include <iostream.h>
#include <iomanip>
#include <cctype>
#include <cstring>
#include <cstdlib>
struct data
{
int dia;
int mes;
int ano;
};
struct data consulta[1];
struct hospital {
char nome[40];
char morada [50];
struct data datac;
char motivo [100];
};
struct hospital paciente;
int ler();
int mostrar();
int sair();
int main () {
int opcao=0;
while(opcao!=3)
{
	cout<<"******Hospital*******"<<endl;
	cout<<endl;
	cout<<" 1 - Ler dados "<<endl;
	cout<<" 2 - mostrar dados "<<endl;
	cout<<" 3 - Sair "<<endl;
	cout<<endl;
	cout<<"Escolha o numero da sua opcao ->";
	cin>>opcao;
	if(opcao!=3)
	{
		switch(opcao)
		{
		case 1: ler(); break;
		case 2 : mostrar(); break;
		case 3 : sair(); break;
		}
	}
}
return 0;
}
int ler() {
cout<<"***Ler Dados***"<<endl;
cout<<endl;
cout<<"Digite o nome do paciente ->";
cin.getline(paciente.nome, sizeof(paciente.nome));
cout<<endl;
cout<<"Digite a morada do paciente ->";
cin.getline(paciente.morada, sizeof(paciente.morada));
cout<<"Digite a dia da consulta do paciente ->";
cin>>paciente.datac.dia;
cout<<"Digite o mes da consulta do paciente ->";
cin>>paciente.datac.mes;
cout<<"Digite o ano da consulta do paciente ->";
cin>>paciente.datac.ano;
cout<<"Digite o motivo da consulta ->";
cin.getline(paciente.motivo, sizeof(paciente.motivo));
}
int mostrar(){
cout<<"****Mostrar Dados****"<<endl;
cout<<endl;
cout<<"O nome do paciente e' "<<paciente.nome<<endl;
cout<<"A morada do paciente e' "<<paciente.morada<<endl;
cout<<"A data da consulta e' "<<paciente.datac.dia<<" "<<paciente.datac.mes<<" "<<paciente.datac.ano<<endl;
cout<<"O motivo da consulta e' "<<paciente.motivo<<endl;
}
int sair(){
return 0;
}

É o seguinte, neste programa esta tudo correcto, ou melhor quase tudo, o que esta mal é um bug que tenho aqui.

o bug é na funçao ler() pois ele salta me o primeiro cin.getline a frente, como podem vir a testar.

Eu meti um cin.getline em seco antes do cout e funcionou mas o stor nao quer assim.

Tambem ja meti antes do cin.getline(); um cin>>ws; e na outra vez um cin.ignore(); e tb funciona mas o stor diz que é o mesmo que meter um cin.getline em falso como eu fazia e nao quer assim.

Alguem me pode ajudar?

cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

isto é mais um exercício de C do que C++ da maneira como está estruturado... O que o teu stôr quer, é que faças flush do stdin (o input geral), portanto adiciona isto antes de cada cin:

fflush(stdin);

e voilá!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora