Android97
@Android97
Бэкенд и немного фронтенд разработчик

Почему проскакивает cin?

7463fa835a9f4303973f66cd79e45715.png

Почему проскакивает ввод оператором >> ?
Фрагмент кода программы :
Person *pPersonArray[5];
	for (int i = 0; i < 5; i++)
	{
		Person *pDynPerson = new Person("Dinamyc", "Person", 10, Male);
		PrintPerson(*pDynPerson);
		ReadPerson(pDynPerson);
		PrintPerson(*pDynPerson);
		delete pDynPerson;
	}


Person.h
#pragma once
#include <iostream>
#include <string>
#include "Sex.h"

struct Person
{
	std::string fName, lName;
	int age;
	Sex sex;
	Person(std::string firstName = "", std::string lastName = "", int Age = 0, Sex Sex = Male)
	{
		fName = firstName;
		lName = lastName;
		age = Age;
		sex = Sex;
	}

};

void PrintPerson(Person& person);
void ReadPerson(Person* person);


Person.cpp

#include "Person.h"

void PrintPerson(Person& person)
{
	std::cout << person.fName << '\t' << person.lName << "\t Age:" << person.age << "\t Sex:" << SexToStr(person.sex) << std::endl;
}

void ReadPerson(Person* person)
{
	std::cout << "\nEnter person first name:";
	std::cin >> person->fName;
	std::cout << "\nEnter person last name:";
	std::cin >> person->lName;
	std::cout << "\nEnter person age:";
	std::cin >> person->age;
	std::cout << "\nEnter person sex(Male,Female):";
	std::cin >> person->sex;
}
  • Вопрос задан
  • 349 просмотров
Решения вопроса 1
@Fil
Судя по вашему логу, поломалось на: "Enter person sex(Male,Female):Male"
Так как тип Sex - пользовательский, то для него определена перегрузка оператора >>. В файле Sex.h, который вы не показали, должно быть объявлено что-то вроде:
std::istream& operator>>(std::istream& stream, Sex &sex)
и там должно производиться корректное чтение и обработка введенного значения (т.е. строки "Male" или "Female" и соответствующее заполнение объекта sex)
Ну, навскидку, примерно так:
std::istream& operator>>(std::istream& stream, Sex &sex)
{
	std::string s;
	stream >> s;
	if (s.compare("Male") == 0)
		sex = Male;
	else (s.compare("Female") == 0)
		sex = Female;
	else
		sex = Unknown;
	return stream;
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы