Ir ao conteúdo

getline nao funciona c++


sandro talles

Posts recomendados

Postado
Eu fiz um programa que ler informações sobre um grupo de 3 pessoas e calcula alguns dados estatísticos. Para cada pessoa o programa deve ler o nome da pessoa, a altura, o peso e o sexo (“F” para feminino e “M” para o masculino). Mais na hora do programa ler o nome completo da pessoa da erro, e tambem tem outro erro no separamento do sexo!!!!
 
Esse é o codigo:
 
#include <iostream>
#include <stdlib.h>
#include <string>
using namespace std;
 
int main (){
 
//DECLARANDO VARIAVEIS E VETORES
string nome[3],nome_maior_pessoa,nome_menor_pessoa;
string sexo;
double altura[3]={0},maior_estatura=0,menor_estatura=0,percentual_h=0,percentual_m=0;
double peso [3]={0};
double media_peso=0,sexom=0,sexof=0; 
int x=0; 
 
//LAÇO DE REPETIÇÃO PARA CADASTRAR 3 PESSOAS
for(x=0; x<3; x++){
cout<<"Digite o seu nome : ";
getline(cin,nome[x]);
cout<<endl;
cout<<"Digite sua altura : ";
cin>>altura[x];
cout<<endl;
cout<<"Digite seu peso : ";
cin>>peso[x];
cout<<endl;
cout<<"Digite o seu seu sexo H/F : ";
cin>>sexo[x];
cout<<endl;
system("cls");
}
 
for(x=0; x<3; x++){
// soma dos pesos
media_peso = media_peso+peso[x];
 
if (sexo[x]=='h' || sexo[x]=='H' || sexo[x]=="homem" || sexo[x]=="Homem"){// Quantos masculinos
sexom++;
}else{// Quantos femininos
sexof++;
}}
 
if(altura[0]>altura[1] && altura[0]>altura[2]){// CALCULAR A PESSOA MAIS ALTA
maior_estatura=altura[0];
nome_maior_pessoa = nome[0];
}
if(altura[1]>altura[0] && altura[1]>altura[2]){
maior_estatura=altura[1];
nome_maior_pessoa = nome[1];
}
if(altura[2]>altura[0] && altura[2]>altura[1]){
maior_estatura=altura[2];
nome_maior_pessoa = nome[2];
}
 
if(altura[0]<altura[1] && altura[0]<altura[2]){// CALCULA A PESSOA MAIS BAIXA
menor_estatura=altura[0];
nome_menor_pessoa = nome[0];
}
if(altura[1]<altura[0] && altura[1]<altura[2]){
menor_estatura=altura[1];
nome_menor_pessoa = nome[1];
}
if(altura[2]<altura[0] && altura[2]<altura[1]){
menor_estatura=altura[2];
nome_menor_pessoa=nome[2];
}
 
//percentual dos sexos
percentual_h=(x*(sexom/100));
percentual_m=(x*(sexof/100));
 
//EXIBINDO RESULTADOS
cout<<"Quantidade de pessoas com sexo masculino : "<<sexom<<" pessoas."<<endl;
cout<<"Percentual de pessoas com sexo masculino : "<<percentual_h<<"%."<<endl;
cout<<"Quantidade de pessoas com sexo feminino : "<<sexof<<" pessoas."<<endl;
cout<<"Percentual de pessoas com sexo feminino : "<<percentual_m<<"%."<<endl;
cout<<"Media de peso dos participantes : "<<media_peso/3<<" kg."<<endl;
cout<<"Pessoa mais alta : "<<nome_maior_pessoa<<". Altura = "<<maior_estatura<<" m."<<endl;
cout<<"Pessoa mais baixa : "<<nome_menor_pessoa<<". Altura = "<<menor_estatura<<" m."<<endl;
 
system("pause");
return 0;
}

 

Postado

isis@linux:~/src> g++-5 -std=c++11 -Wall -Wextra peso.cpp 
peso.cpp: In function ‘int main()’:
peso.cpp:36:46: warning: comparison with string literal results in unspecified behaviour [-Waddress]
 if (sexo[x]=='h' || sexo[x]=='H' || sexo[x]=="homem" || sexo[x]=="Homem"){// Quantos masculinos
                                              ^
peso.cpp:36:46: error: ISO C++ forbids comparison between pointer and integer [-fpermissive]
peso.cpp:36:66: warning: comparison with string literal results in unspecified behaviour [-Waddress]
 if (sexo[x]=='h' || sexo[x]=='H' || sexo[x]=="homem" || sexo[x]=="Homem"){// Quantos masculinos
                                                                  ^
peso.cpp:36:66: error: ISO C++ forbids comparison between pointer and integer [-fpermissive]
 
Funciona sim. É só um \n que ficou na entrada.
 
#include <iostream>#include <locale>#include <string>#include <limits>#define MAX_PESSOAS 3using namespace std; int main (){string nomes[MAX_PESSOAS];float alturas[MAX_PESSOAS]={0.0F}, pesos[MAX_PESSOAS]={0.0F};char sexos[MAX_PESSOAS]; float total_peso = 0.0F;int qtde_homem = 0, qtde_mulheres = 0;int pos_pessoa_mais_alta = 0;int pos_pessoa_mais_baixa = 0; int i; for(i=0; i<MAX_PESSOAS; i++) {cout << "Digite o seu nome : ";getline(cin,nomes[i]); cout << "Digite sua altura : ";cin >> alturas[i]; if (alturas[i] > alturas[pos_pessoa_mais_alta])pos_pessoa_mais_alta = i; if (alturas[i] < alturas[pos_pessoa_mais_baixa])pos_pessoa_mais_baixa = i; cout << "Digite seu peso : ";cin >> pesos[i];total_peso += pesos[i]; cout << "Digite o seu seu sexo M/F : ";cin >> sexos[i];cin.ignore(numeric_limits<std::streamsize>::max(), '\n'); if (tolower(sexos[i]) == 'm') {qtde_homem++;} else qtde_mulheres++; } cout << "Quantidade de pessoas com sexo masculino : " << qtde_homem << " pessoas.\n";cout << "Percentual de pessoas com sexo masculino : " << qtde_homem*1.0/MAX_PESSOAS << endl;cout << "Quantidade de pessoas com sexo feminino : " << qtde_mulheres << " pessoas.\n";cout << "Percentual de pessoas com sexo feminino : " << qtde_mulheres*1.0/MAX_PESSOAS << endl;cout << "Media de peso dos participantes : " << total_peso/MAX_PESSOAS << " kg.\n";cout << "Pessoa mais alta : " << nomes[pos_pessoa_mais_alta] << ". Altura = " << alturas[pos_pessoa_mais_alta] << " m.\n";cout << "Pessoa mais baixa : "<< nomes[pos_pessoa_mais_baixa] << ". Altura = " << alturas[pos_pessoa_mais_baixa] << " m.\n"; return 0;}

Arquivado

Este tópico foi arquivado e está fechado para 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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!