Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Ana Júlia Silva

C++ o getline não está funcionando

Recommended Posts

Postado (editado)

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

 

Editado por Simon Viegas
Inserir tag CODE

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






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

×