Как вывести динамический список? - 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, что означает успешное выполнение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д