Не работают некоторые else if
Друзья, привет, подскажите пожалуйста, у меня есть else if, где идет проверка введенного параметра на "Цвет волос" и "Цвет кожи", и когда я ввожу одно из этих значений, условный оператор else if не выполняется? Причём всё остальное работает на ура. Вот код:
#include <iostream>
class Human
{
public:
std::string name;
std::string sex;
std::string colorofhair;
std::string colorofskin;
int age;
int weight;
int height;
};
int main()
{
system("chcp 1251 > nul");
setlocale(LC_ALL, "ru");
Human firstHuman;
firstHuman.name = "Андрей";
firstHuman.age = 21;
firstHuman.sex = "Мужчина";
firstHuman.colorofhair = "Чёрный";
firstHuman.colorofskin = "Белый";
firstHuman.weight = 67;
firstHuman.height = 185;
while (true)
{
std::string value;
std::cout << "Введите свойство, которое вы хотите узнать?: ";
std::cin >> value;
if (value == "Имя")
{
std::cout << "Имя человека: " << firstHuman.name << std::endl;
}
else if (value == "Возраст")
{
std::cout << "Возраст человека: " << firstHuman.age << std::endl;
}
else if (value == "Пол")
{
std::cout << "Пол человека: " << firstHuman.sex << std::endl;
}
else if (value == "Цвет волос") // Не работает
{
std::cout << "Цвет волос человека: " << firstHuman.colorofhair << std::endl;
}
else if (value == "Цвет кожи") // Не работает
{
std::cout << "Цвет кожи человека: " << firstHuman.colorofhair << std::endl;
}
else if (value == "Вес")
{
std::cout << "Вес человека: " << firstHuman.weight << std::endl;
}
else if (value == "Рост")
{
std::cout << "Рост человека: " << firstHuman.height << std::endl;
}
else
{
std::cout << "К сожалению такого свойства у этого человека нет." << std::endl;
}
}
}
Ответы (1 шт):
Автор решения: Listopad02
→ Ссылка
В комментариях уже написали, но я распишу чуть подробнее:
cin считывает до пробела, потому и были проблемы именно в тех местах, где строка состоит из двух слов. Чтобы это исправить, нужно использовать функцию getline, которая считает значение полностью, вот так это будет выглядеть:
#include <iostream>
#include <string> // Библиотека, которую необходимо подключить для getline
class Human
{
public:
std::string name;
std::string sex;
std::string colorofhair;
std::string colorofskin;
int age;
int weight;
int height;
};
int main()
{
system("chcp 1251 > nul");
setlocale(LC_ALL, "ru");
Human firstHuman;
firstHuman.name = "Андрей";
firstHuman.age = 21;
firstHuman.sex = "Мужчина";
firstHuman.colorofhair = "Чёрный";
firstHuman.colorofskin = "Белый";
firstHuman.weight = 67;
firstHuman.height = 185;
while (true)
{
std::string value;
std::cout << "Введите свойство, которое вы хотите узнать?: ";
getline(std::cin, value); // вот такой синтаксис
if (value == "Имя")
{
std::cout << "Имя человека: " << firstHuman.name << std::endl;
}
else if (value == "Возраст")
{
std::cout << "Возраст человека: " << firstHuman.age << std::endl;
}
else if (value == "Пол")
{
std::cout << "Пол человека: " << firstHuman.sex << std::endl;
}
else if (value == "Цвет волос") // Не работает
{
std::cout << "Цвет волос человека: " << firstHuman.colorofhair << std::endl;
}
else if (value == "Цвет кожи") // Не работает
{
std::cout << "Цвет кожи человека: " << firstHuman.colorofskin << std::endl;
}
else if (value == "Вес")
{
std::cout << "Вес человека: " << firstHuman.weight << std::endl;
}
else if (value == "Рост")
{
std::cout << "Рост человека: " << firstHuman.height << std::endl;
}
else
{
std::cout << "К сожалению такого свойства у этого человека нет." << std::endl;
}
}
}
P.S. вы и в цвете волос, и в цвете кожи выводили цвет волос