Ir ao conteúdo

Posts recomendados

Postado

esse é um programa pra ler a distancia entre duas cidades. Ainda tem alguns erros na lógica e na matemática, mas o que não estou conseguindo resolver mesmo é o segundo getline. O primeiro funciona direitinho, mas o segundo não dá espaço para o texto ser digitado. O que posso ter feito de errado???

#include<iostream>
#include<string.h>
#include<math.h>
#include<stdio.h>
using namespace std;
int unidade(string origem, string destiny, float distancia){
    int unid;
    
    cout<<"Unidade de medida desejada: \n 1. quiilômetros \t 2. metros ";
    cin>>unid;
    if(unid==1)
        cout<<"A distancia entre "<<origem<<" e "<<destiny<<" é: "<<distancia<<" quilômetros.";
    else if(unid==2){
        distancia=distancia*1000;  
        cout<<"A distancia entre "<<origem<<" e "<<destiny<<" é: "<<distancia<<" metros.";
    }
    else{
        cout<<"Unidade de medida inválida. Digite-a novamente.\n\n";
        unidade(origem, destiny, distancia);
    }
    return 0;
}
int main(void){
    float lat1, lat2, long1, long2, latitude, longitude, distancia, dla, dlo;
    string origem, destiny;
    
    cout<<"Lugar de origem:";
    getline(cin, origem);
    cout<<"Latitude da cidade (em graus): ";
    cin>>lat1;
    cout<<"Longitude da cidade (em graus): ";
    cin>>long2;
    cout<<"Lugar de destino:";
    ESSE AQUI NÃO FUNCIONA>>> getline(cin,destiny);
    cout<<"Latitude da cidade (em graus):";
    cin>>lat2;
    cout<<"Longitude da cidade (em graus): ";
    cin>>long2;
    
    dla=lat1-lat2;
    dlo=long1-long2;
    
        latitude=(dla*60)*1,812;
        longitude=(dlo*60)*1,1812;
    
        distancia=sqrt((pow(2, latitude)+pow(2, longitude)));
    
        unidade(origem, destiny, distancia);
        return 0;
}

 

Postado

@Ana Júlia Silva  Olá. O problema é sujeira no buffer de entrada. Experimenta fazer essa mudança (na parte comentada):

 

cout<<"Lugar de origem:";
getline(cin, origem);
cout<<"Latitude da cidade (em graus): ";
cin>>lat1;
cout<<"Longitude da cidade (em graus): ";
cin>>long2;
cin.get(); // esse comando serve para limpar o buffer de entrada no C++
cout<<"Lugar de destino:";
// ...

Apenas uma dica: Em C++, para o caso de trabalhar com strings é usada a biblioteca <string>. Em C é q se usa a biblioteca <string.h>. Também não é necessário o uso da biblioteca <stdio.h>. Essa última também é para códigos em C e não C++.

Apenas fiz esses comentários para procurar orientar você, ok?

  • Membro VIP
Postado

@Ana Júlia Silva, pelo que eu vi o problema é quando usa um cin>>.. antes do getline()...

 

Poderia antes invocar o cin.ignore() toda vez que for invocar getline()...  algo assim:

cin.ignore(); getline(cin, <variável_a_ser_lida>);


Ou se tiver atenção, só quando antes teve um cin>>.

Obs.: não sei qual seria a melhor estratégia.

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!