Ir ao conteúdo
  • Cadastre-se

C++ o getline não está funcionando


Posts recomendados

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

 

Link para o comentário
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?

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

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

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