C/C++

Программа на c++ не работает. Написать структуру и прочее. Подскажите, пожалуйста, что я делаю не так.

Задача в приложении.

Сам код:

#include <iostream>
#include <conio.h>
#include <windows.h>
#include <cstdlib>
#include <ctime>
using namespace std;
#pragma hdrstop
#pragma argsused
char* rus(const char* text);//функция для распознавания русских символов
int compare(const void* worker1, const void* worker2);//функция для сортировки
const int k = 30;//объявление именованный констант
struct Worker //объявление струкуры
{
char fio[k];//объявление
char prof[k];//полей
int god;//структуры
};
int main(int argc, char* argv[]);
{
int i, n;
bool not_found;
int staj;
struct tm* tim;
time_t tt = time(NULL);
tim = localtime(&tt);
int current_year = tim->tm_year + 1900;
cout << rus("Введите количесвто структур WORKER: ");
cin >> n;
cout >> endl;
Worker* WORKER = new Worker[n];//выделение в памяти место под массив структур
for (int i = 0; i < n; i++)
{
cout << (i + 1) << rus(".Введите фамилию и инициалы: ");
cin.ignore(); cin.getline(WORKER[i].fio, k)//ввод
cout << rus(" Введите название должности: ");
cin.getline(WORKER[i].prof, k);
cout << rus(" Введите год поступления: "); cin >> WORKER[i].god;//в структуру
cout << endl;
}
qsort(WORKER, n, sizeof(Worker), compare);//вызов функции для сортировки
cout << rus(" Записи упорядоченные по алфавиту:\n\n");
for (int i = 0; i < n; i++)
{//вывод отсортированной структуры
cout << rus(" Фамилия и инициалы: ") << WORKER[i].fio << endl;
cout << rus(" Должность: ") << WORKER[i.prof << endl;
cout << rus(" Год поступления: ") << WORKER[i].god;
cout << endl << endl;
}
cout << rus("\n Информация о людях, чей стаж превышает значение введенного с клавиатуры: ") << endl;
while (true)
{
cout << rus("Введите стаж работы или 0 для окончания: "); cin >> staj;
cout << endl;
if (0 == staj)break;
not_found = false;
for (int i = 0; i < n; i++)
{
if (current_year - WORKER[i].god > staj)
{
cout << rus(" Фамилия и инифицалы: ") << WORKER[i].fio << endl;//вывод
cout << rus(" Должность: ") << WORKER[i].prof << endl;
not_found = true;
cout << endl;
}
}//если нет такой информации выводится сообщение
if (not_foud == false)cout << rus("Таких рабонков нет!") << endl << endl;
}
getch();
return 0;
}
Вообще само задание очень странное. Я понимаю, что оно вроде как учебное, но учить лучше сразу правильно, чтобы потом не переучиваться. Хранить данные о работниках в том виде, как написано в этом ТЗ мягко говоря не самая лучшая идея. Это касается как самих полей структуры с фиксированной длиной (с этим, в ряде случаев, еще можно смириться), так и идею о том, что кто-то заранее будет знать, сколько всего будет элементов. Такие вещи так не делают. И сортировать удобнее не сами структуры а указатели на них.

Теперь по поводу улучшений и исправлений.
Рекомендация такая: напишите сначала функцию вида
bool get_worker_data( struct WORKER* w )
Эта функция должна обеспечивать ввод информации об одном работнике в структуру по указателю w и должна возвращать true если в процессе ввода не было допущено каких-либо ошибок
Затем нужна функция
void show_worker_data( struct WORKER* w )
которая будет выводить информацию о работнике из структуры по указателю w
При помощи этих двух функций вы сделаете текст остальной программы гораздо более читаемым и это позволит проще отладить программу.
Евгений Бугаев
Евгений Бугаев
9 624
Лучший ответ
int main(int argc, char* argv[]);
; лишняя
cout >> endl;
<<
cin.getline(WORKER[i].fio, k)
; не хватает

дальше не читал, для начала хотя бы почитай то, что тебе компилятор пишет
Масса каких-то синтаксических ошибок вида WORKER[i.prof, отсутствует реализация заявленных функций.