Ir ao conteúdo
  • Cadastre-se

C++ operadores ostream e istream


Bunitão

Posts recomendados

Bom Dia estou com o seguinte problema abaixo:

 

Faça com que horários (registro horário) possam ser lidos com cin, exibidos com cout e subtraídos com o operador de subtração, operator-(). O resultado da subtração deve ser um valor representando a diferença em minutos. Para simplificar, considere que os horários estão sempre dentro de um mesmo dia.

 

meu codigo ficou assim:

#include<iostream>


using namespace std;

struct horario {
    int hora;
    int minuto;

};

istream& operator>>(istream&, horario&);
ostream& operator<<(ostream&, horario);
horario operator-(horario, horario);

int main() {
    horario h1, h2;
    cin >> h1;
    cin >> h2;
    cout << (h1 - h2);


}


istream & operator>>(istream & is, horario& tempo){
    char ponto =':';
    is >> tempo.hora;
    is >> ponto;
    is  >> tempo.minuto;
    

    return is;
}

ostream & operator<<(ostream & os, horario tempo)
{
     os << tempo.hora;
     
     os << tempo.minuto;
        

       
    return os;
}

horario operator-(horario h1, horario h2){
     
    
    horario tempo; 
    tempo.hora = (h2.hora - h1.hora) * 60;
    tempo.minuto = h2.minuto - h1.minuto;
    tempo.minuto += tempo.hora;
    tempo.hora = 0;
     return tempo;

}

 

 

 

mas não consigo chegar na saida que o problema pede, por exemplo 09:30 às 09:45 (15 min), minha saida fica 015 ao invés de 15 

tambem ao mostrar os horarios, por exmplo 09:30, aparece 09:3

 

alguém poderia me ajudar?

 

grato

 

 

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

@Bunitão   parece que não se pode fazer cálculos entre struct's , e sim nas variáveis que estejam dentro da struct ,  

#define     _WIN32_WINNT 0x600
#define     _h GetStdHandle(STD_OUTPUT_HANDLE)
#include    <cstdio.h>
#include    <cstdlib.h>
#include    <conio.h>
#include    <string.h>
#include    <windows.h>
#include    <iostream>
#include    <iomanip>
using namespace std;
struct horario
{
  int hora;
  int minuto;
};
/// istream& operator>>(istream&, horario&);
/// ostream& operator<<(ostream&, horario);
/// horario operator-(horario, horario);
  
int main( int Argc, char **Argv )
{
  horario h1, h2;
  cout << "Hora   inicial ";
  cin  >> h1.hora;
  cout << "Minuto inicial ";
  cin  >> h1.minuto;
  cout << "\nHora    FinaL   ";
  cin  >> h2.hora;
  cout << "Minuto  FinaL   ";
  cin  >> h2.minuto;
  int resH = h2.hora-h1.hora ;
  int resM = h2.minuto-h1.minuto;
  /// cout << "Resultado     = " << setw(3)<< (h1 - h2) << endl;
  cout << "\nResutaDo Horas " << resH << " : " << resM << "Minutos." << endl;
  cout << "resultado em Minutos " << abs(resH*60+resM) << endl;
  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!