Как вывести динамический список? - C (СИ)
Формулировка задачи:
как вывести динамический список?
не работает
вот сама программа
void printWorkerList(Worker* List)
{
while(List!=NULL)
{
printf("%s",List->dolshnost);
printf("%s",List->nameofWorker);
printf("%d",List->year);
List = List->next;
}
}Решение задачи: «Как вывести динамический список?»
textual
Листинг программы
#include <iostream>
#include <stdio.h>
#include <locale.h>
#include <conio.h>
struct Worker
{
char nameofWorker[30];
char dolshnost[30];
int year;
struct Worker * next;
};
void printWorkerList(Worker* List) {
while (List != NULL) {
printf("%s", List->dolshnost);
printf("%s", List->nameofWorker);
printf("%d", List->year);
List = List->next;
}
}
int main(int* argc, char * argv[])
{
setlocale(LC_CTYPE, "rus");
int n;
printf("количество рабочих");
scanf("%d", &n);
Worker * r = new Worker[n];
for (int i = 0; i < n; i++) {
printf("%i \n", i + 1);
printf("введите имя рабочего ");
scanf("%s", r->nameofWorker);
printf("введите год принятия на работу ");
scanf("%d", &r->year);
printf("введите должность ");
scanf("%s", r->dolshnost);
for (int k = i; k < i; k++) {
r = r->next;
}
}
printWorkerList(r);
int currentYear;
printf("какова нужный год");
scanf("%d", ¤tYear);
for (int i = 0; i < n; i++) {
if (r->year == currentYear) {
printf("%s", r->nameofWorker);
printf("%s", r->dolshnost);
printf("%d", r->year);
printf("\n");
}
r = r->next;
}
delete[] r;
getch();
return 0;
}
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы: iostream, fstream, stdlib.h, string.h
- Объявляется структура Worker, которая содержит поля: имя рабочего, должность, год принятия на работу и указатель на следующий элемент списка.
- Создается функция printWorkerList, которая принимает указатель на первый элемент списка и выводит значения полей каждого элемента до тех пор, пока не будет равно NULL.
- В функции main создается локальная переменная n, в которую считывается количество рабочих.
- Создается массив Worker* r, который будет содержать указатели на элементы списка.
- В цикле от 0 до n-1 считываются значения полей для каждого рабочего и записываются в соответствующие поля в массиве r.
- После заполнения списка, вызывается функция printWorkerList с аргументом r.
- Затем пользователю предлагается ввести год, и в цикле от 0 до n-1 проверяется, совпадает ли год принятия на работу с введенным годом. Если да, то выводятся значения полей.
- После выхода из цикла, массив r освобождается с помощью оператора delete[].
- В конце программы вызывается функция getch() для приостановки выполнения программы до нажатия клавиши.
- Возвращается 0, что означает успешное выполнение программы.