Ir ao conteúdo
  • Cadastre-se

Problema com conversor de moedas


Posts recomendados

Pessoal no capitulo 4 do livro do Bjarne Stroustrup - Princípios e praticas de programação em c++ ele da um exercício para desenvolver um conversor de moedas do tipo ienes, euros e libras para dólar.

 

Ate ai tudo bem, eu fiz o exercício mas esta acontecendo algo que eu não consigo descobrir o que é, quando eu digito: 1e era pra mostrar o valor de 1 euro para dólares ele cai no else dizendo que não reconhece a moeda mas se eu entrar com 1 e ( 1 espaço e)  ou tentar outra letra que não seja 'e' a entrada é aceita. Teoricamente era para funcionar do jeito que esta, testei no Codeblocks 16.01 com gcc 4.9 e no visual studio community 2017 e nada.

 

Aqui vai o código:

#include <iostream>

using namespace std;

int main()
{
    // Fonte: https://br.advfn.com/conversor-moedas/
    const double dolar_yen = 0.0090;
    const double dolar_euro = 1.1186;
    const double dolar_pound = 1.2779;
    const double dolar_real = 3.2933;

    double valor = 0;

    char moeda = ' ';

    cout << "Entre com o valor do dinheiro seguido da moeda (y, e, p ou r):\n";
    cin >> valor >> moeda;

    if (moeda == 'y')
        cout << valor << " yen == " << dolar_yen*valor << " dolares\n";
    else if (moeda == 'e')
        cout << valor << " euro == " << dolar_euro*valor << " dolares\n";
    else if (moeda == 'p')
        cout << valor << " pound == " << dolar_pound*valor << " dolares\n";
    else if (moeda == 'r')
        cout << valor << " real == " << dolar_real*valor << " dolares\n";
    else
        cout << "\nDesculpe, tipo de moeda nao aceita" << moeda << '\n';

	return 0;
}

 

Link para o comentário
Compartilhar em outros sites

Quando você passa o valor 1e, somente a variável valor vai receber, mas como ela é do tipo double, dá erro. Com o espaço, o C++ já entende que o 1 quem recebe é o valor e o "e" quem vai receber é a moeda.

 

Pra ficar mais claro, repasso o código com uma modificação:


 

#include <iostream>
using namespace std;

int main()
{
    // Fonte: https://br.advfn.com/conversor-moedas/
    const double dolar_yen = 0.0090;
    const double dolar_euro = 1.1186;
    const double dolar_pound = 1.2779;
    const double dolar_real = 3.2933;
    double valor = 0;
    char moeda = ' ';
    cout << "Entre com o valor do dinheiro seguido da moeda (y, e, p ou r):\n";
    cin >> valor >> moeda;
  	//Modificação abaixo
    cout << "\n\n";
    cout << valor << "\n";
    cout << moeda << "\n";
  	//encerra modificação
    if (moeda == 'y')
        cout << valor << " yen == " << dolar_yen*valor << " dolares\n";
    else if (moeda == 'e')
        cout << valor << " euro == " << dolar_euro*valor << " dolares\n";
    else if (moeda == 'p')
        cout << valor << " pound == " << dolar_pound*valor << " dolares\n";
    else if (moeda == 'r')
        cout << valor << " real == " << dolar_real*valor << " dolares\n";
    else
        cout << "\nDesculpe, tipo de moeda nao aceita" << moeda << '\n';
    return 0;
}

 

Link para o comentário
Compartilhar em outros sites

O problema não é esse, o curioso é que as opções  y, p e r estão funcionando corretamente.

 

Segundo o programa rodando fica assim:

 

Entre com o valor do dinheiro seguido da moeda (y, e, p ou r):

1y

1 yen == 0.009 dolares

 

Entre com o valor do dinheiro seguido da moeda (y, e, p ou r): // Da Erro

1e

Desculpe, tipo de moeda nao aceita"

 

Entre com o valor do dinheiro seguido da moeda (y, e, p ou r): // Com espaço funciona

1 e

1 euro == 1.1186 dolares

 

Entre com o valor do dinheiro seguido da moeda (y, e, p ou r):

1p

1 pound == 1.2779 dolares

 

Entre com o valor do dinheiro seguido da moeda (y, e, p ou r):

1r

1 real == 3.2933 dolares

 

Hehe entendeu o drama, somente com o caractere 'e' esta acontecendo isso, é algo realmente estranho, não era pra acontecer.

Link para o comentário
Compartilhar em outros sites

Então porque tipo não é uma operação direta que poderia acarretar uma conversão insegura tipo int para char, double para char esse tipo de coisa, inclusive procurando em alguns github de um pessoal que fez os exercícios do livro usaram tipo double no mesmo exercicio. Se fosse algo errado daria problema para todas as condições testadas e não especificamente em uma.

 

Pode falar algo a respeito?

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

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

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!