Могу предположить, что cin >> K[i].year; не читает завершение строки(ведь они не число) и оно прилетает на ввод следующего имени. Вообще в нынешнем с++ использование указателей и неуправляемых массивов — ересь.
#include <windows.h>
#include <iostream>
#include <vector>
#include <string>
#include <sstream>
#include <algorithm>
#include <ctime>
using namespace std;
const int UserCount = 3;
struct Worker { // начало объявления структурного типа Worker
string surname; //объявление поля «фамилия работника»
string position; //объявление поля «название занимаемой должности»
unsigned short int year; //объявление поля «год поступления на работу»
static bool insensitive_compare(const Worker& a, const Worker& b)
{
string ta(a.surname), tb(b.surname);
transform(ta.begin(), ta.end(), ta.begin(), [](unsigned char c) { return std::toupper(c); });
transform(tb.begin(), tb.end(), tb.begin(), [](unsigned char c) { return std::toupper(c); });
return ta < tb;
}
}; //конец объявление структуры Worker
template<class T> void getline_i(istream& is, T& o)
{
string s;
while (true)
{
getline(is, s);
stringstream(s) >> o;
if (s.length() < 1 || !isdigit(s[0]))
{
cout << "Ошибка. Значение должно быть числом: ";
continue;
}
else
{
break;
}
}
}
int main()
{
system("chcp 1251");
int n = 3; // объявление константы n — числа элементов типа «Worker»
bool people = false;
time_t rawtime;
struct tm _tm;
time(&rawtime);
gmtime_s(&_tm, &rawtime);
unsigned short int now_year = _tm.tm_year + 1900, seniority; // объявление переменных now_year — текущий год и seniority — стаж
vector<Worker> K;
Worker temp;
for (int i = 0; i < UserCount; i++)
{
cout << "Фамилия и инициалы: ";
getline(cin, temp.surname);
cout << "Название занимаемой должности: ";
getline(cin, temp.position);
cout << "Год поступления на работу: ";
getline_i(cin, temp.year);
cout << "\n";
K.push_back(temp);
}
cout << "Введите стаж работы(лет): ";
getline_i(cin, seniority);
cout << endl;
for (auto current : K)
{
if ((now_year - current.year) > seniority)
{
cout << current.surname << endl;
people = true;
}
}
if (people == false)
cout << "Нет таких работников!" << endl;
cout << endl;
cout << "Список работников в алфавитном порядке" << endl;
sort(K.begin(), K.end(), Worker::insensitive_compare);
for (auto current : K)
cout << current.surname << endl;
system("pause");
return 0;
}