fork download
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4.  
  5. #define MAX_STUDENTS 100
  6. #define MAX_STRING_LEN 50
  7.  
  8. typedef struct {
  9. char surname[MAX_STRING_LEN];
  10. char name[MAX_STRING_LEN];
  11. char patronymic[MAX_STRING_LEN];
  12. char birth_date[11]; // формат "YYYY-MM-DD"
  13. char address[100];
  14. char phone[20];
  15. char faculty[MAX_STRING_LEN];
  16. int course;
  17. } Student;
  18.  
  19. // Безопасное копирование строк
  20. void safe_strcpy(char* dest, const char* src, size_t dest_size) {
  21. strncpy(dest, src, dest_size - 1);
  22. dest[dest_size - 1] = '\0';
  23. }
  24.  
  25. // Функция инициализации студента
  26. void set_student(Student *s, const char *surname, const char *name, const char *patronymic,
  27. const char *birth_date, const char *address, const char *phone,
  28. const char *faculty, int course) {
  29. safe_strcpy(s->surname, surname, sizeof(s->surname));
  30. safe_strcpy(s->name, name, sizeof(s->name));
  31. safe_strcpy(s->patronymic, patronymic, sizeof(s->patronymic));
  32. safe_strcpy(s->birth_date, birth_date, sizeof(s->birth_date));
  33. safe_strcpy(s->address, address, sizeof(s->address));
  34. safe_strcpy(s->phone, phone, sizeof(s->phone));
  35. safe_strcpy(s->faculty, faculty, sizeof(s->faculty));
  36. s->course = course;
  37. }
  38.  
  39. // Функция вывода информации о студенте (исправленная)
  40. void show_student(const Student *s) {
  41. printf("ФИО: %s %s %s\n", s->surname, s->name, s->patronymic); // Исправлено с sumname на surname
  42. printf("Дата рождения: %s\n", s->birth_date);
  43. printf("Адрес: %s\n", s->address);
  44. printf("Телефон: %s\n", s->phone);
  45. printf("Факультет: %s\n", s->faculty);
  46. printf("Курс: %d\n", s->course);
  47. printf("-------------------------------------\n");
  48. }
  49.  
  50. // Получение года рождения из даты
  51. int get_birth_year(const Student *s) {
  52. char year_str[5];
  53. strncpy(year_str, s->birth_date, 4);
  54. year_str[4] = '\0';
  55. return atoi(year_str);
  56. }
  57.  
  58. // Вывод студентов по факультету
  59. void print_by_faculty(const Student students[], int n, const char *faculty) {
  60. printf("\nСтуденты факультета %s:\n", faculty);
  61. int found = 0;
  62. for (int i = 0; i < n; i++) {
  63. if (strcmp(students[i].faculty, faculty) == 0) {
  64. show_student(&students[i]);
  65. found = 1;
  66. }
  67. }
  68. if (!found) {
  69. printf("Студентов на факультете '%s' не найдено.\n", faculty);
  70. }
  71. }
  72.  
  73. int main() {
  74. Student students[MAX_STUDENTS];
  75. int n = 3;
  76.  
  77. // Инициализация студентов
  78. set_student(&students[0], "Иванов", "Иван", "Иванович", "2002-05-14",
  79. "г. Москва, ул. Ленина, 10", "+71234567890", "Физика", 2);
  80. set_student(&students[1], "Петров", "Петр", "Петрович", "2001-03-22",
  81. "г. Санкт-Петербург, Невский пр., 20", "+79876543210", "Информатика", 3);
  82. set_student(&students[2], "Сидоров", "Сидор", "Сидорович", "2003-12-01",
  83. "г. Казань, ул. Баумана, 5", "+79991112233", "Физика", 1);
  84.  
  85. // Пример использования
  86. print_by_faculty(students, n, "Информатика"); // Выведет только Петрова
  87. print_by_faculty(students, n, "Физика"); // Выведет Иванова и Сидорова
  88.  
  89. return 0;
  90. }
Success #stdin #stdout 0.01s 5284KB
stdin
Standard input is empty
stdout
Студенты факультета Информатика:
ФИО: Петров Петр Петрович
Дата рождения: 2001-03-22
Адрес: г. Санкт-Петербург, Невский пр., 20
Телефон: +79876543210
Факультет: Информатика
Курс: 3
-------------------------------------

Студенты факультета Физика:
ФИО: Иванов Иван Иванович
Дата рождения: 2002-05-14
Адрес: г. Москва, ул. Ленина, 10
Телефон: +71234567890
Факультет: Физика
Курс: 2
-------------------------------------
ФИО: Сидоров Сидор Сидорович
Дата рождения: 2003-12-01
Адрес: г. Казань, ул. Баумана, 5
Телефон: +79991112233
Факультет: Физика
Курс: 1
-------------------------------------