В for l oop
string temp1,temp2;
for (int i = 0; i < numbersOfDoctors; i++)
{
// ...
temp1+=doctors[i].name;
temp2+=doctors[i].surname;
}
вы накапливаете имена и фамилии в одной строке даже без пробелов.
Итак, это l oop
do
{
if (name1 != temp1 || surname1 != temp2)
{
cout << "There is no name nor surname of the doctor you have entered. Enter again: ";
cin >> name1 >> surname1;
}
}while(name1 != temp1 || surname1 != temp2);
никогда не прерывает свои итерации, пока вы не введете строку, которая будет содержать все имена и фамилию в виде отдельных строк.
Возможно, вам нужно изменить условие в операторе if и в l oop на
( temp1.find( name1 ) == std::string::npos || temp2.find( surname1 ) == std::string::npos )
И логически относительно используемого условия в операторе if сообщение должно выглядеть так:
"There is no name or surname of the doctor you have entered. Enter again: "
^^^
На самом деле использование переменных temp1
и temp2
не имеет смысла. . Вы должны удалить их. Эта часть программы может выглядеть следующим образом:
#include <algorithm> // this header is required for using std::find_if
//...
string name1,surname1;
cout << "Enter the name of doctor you see: ";
cin >> name1;
cout << "Enter the surname of doctor you see: ";
cin >> surname1;
bool success = false;
do
{
success = std::find_if( doctors, doctors + numbersOfDoctors,
[&]( const auto &d )
{
return d.name == name1 && d.surname == surname1;
} ) != doctors + numbersOfDoctors;
if ( not success )
{
cout << "There is no name or surname of the doctor you have entered. Enter again: ";
cin >> name1 >> surname1;
}
} while( not success );
Вот демонстрационная программа.
#include <iostream>
#include <string>
#include <algorithm>
struct dataAboutDoctors
{
std::string name;
std::string surname;
std::string profession;
};
int main()
{
const size_t N = 100;
dataAboutDoctors doctors[N] =
{
{ "Samed", "Skulj", "Stomatolog" },
{ "Adin", "Vrbic", "Hirurg" },
{ "Ahmed", "Skulj", "Psihijatar" }
};
size_t numbersOfDoctors = 3;
std::string name1, surname1;
std::cout << "Enter the name of doctor you see: ";
std::cin >> name1;
std::cout << "Enter the surname of doctor you see: ";
std::cin >> surname1;
bool success = false;
do
{
success = std::find_if( doctors, doctors + numbersOfDoctors,
[&]( const auto &d )
{
return d.name == name1 && d.surname == surname1;
} ) != doctors + numbersOfDoctors;
if ( not success )
{
std::cout << "There is no name or surname of the doctor you have entered. Enter again: ";
std::cin >> name1 >> surname1;
}
} while( not success );
return 0;
}