Ir ao conteúdo
  • Cadastre-se
Ana Júlia Silva

C++ o getline não está funcionando

Recommended Posts

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;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

problemas de lixo no buffer. Procure limpar o buffer antes de chamar a getline, entre outras estratégias que seja possível seguir para resolver esse problema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

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

×