Используя структуру с полями пол, ФИО, возраст, распечатать количество девушек по имени "Elena" - C (СИ)
Формулировка задачи:
#include<stdio.h> #include<stdlib.h> #include<math.h> #include<conio.h> struct { char name [20]; char surname [40]; char sexist [10]; int age; } student [10]; void name (student *, int); void age (student *, int); void main() { FILE *f; int request, i, n; if ( (f =fopen("student1.txt","r"))==NULL ) { printf("Error while opening student.txt/n"); } else for(i=0; i<10; i++) { fgets(student[i].name, 20, f); fgets(student[i].surname, 40, f); fgets(student[i].sexist, 10, f); fscanf(f, "%d", &student[i].age); } /*for(i=0; i<10; i++) { printf("%s%s%s%d", student[i].name, student[i].surname, student[i].sexist, student[i].age); }*/ fclose(f); while (request!=5) { printf("\nenter request:"); printf("\n1-seach Elena\n 2-seach age\n"); scanf("%d", &request); switch(request) { case 1: name (student, 10); break; case 2: age (student, 10); break; case 3: return; default: puts("Error"); } } getch(); } void name (student * a, int n) { int i, count=0; for (i=0; i<10; i++) { if (student[i].name == "Elena") { count++; f=fopen("student1.txt","a") fprintf(f,"%d", count)); } } } void age (student *a, int n) { int i for (i=0; i<10; i++) { if (student[i].age == 19) f=fopen("student1.txt","a") fprintf(f, "%s", student[i].name); } }
Решение задачи: «Используя структуру с полями пол, ФИО, возраст, распечатать количество девушек по имени "Elena"»
#include <stdio.h> #include <stdlib.h> #include <string.h> #define N 10 struct Student { char name [20]; char surname [40]; char sexist [10]; int age; }; void SearchByName (struct Student* st, int size, const char* Name); void SearchByAge (struct Student* st, int size, int age); int main() { FILE* f; int request, i; struct Student student[N]; if ((f = fopen("student1.txt", "r")) == NULL) { printf("Error while opening student.txt/n"); return 1; } for(i = 0; i < N; ++i) { fgets(student[i].name, 20, f); fgets(student[i].surname, 40, f); fgets(student[i].sexist, 10, f); fscanf(f, "%d", &student[i].age); } fclose(f); while (request != 5) { printf("\nenter request:\n1-seach Elena\n 2-seach age\n"); scanf("%d", &request); switch(request) { case 1: SearchByName(student, N, "Elena"); break; case 2: SearchByAge(student, N, 19); break; case 3: return 0; default: printf("\nError"); } } getchar(); } void SearchByName(Student* arr, int size, const char* name) { int i, count = 0; for (i = 0; i < size; ++i) { if (!strcmp(arr[i].name, name)) { printf("\n%s\t%s\t%s\t%d", arr[i].name , arr[i].surname , arr[i].sexist , arr[i].age); } } } void SearchByAge(Student* arr, int size, int age) { int i, count = 0; for (i = 0; i < size; ++i) { if (arr[i].age == age) { printf("\n%s\t%s\t%s\t%d", arr[i].name , arr[i].surname , arr[i].sexist , arr[i].age); } } }
Объяснение кода листинга программы
В данном коде используется язык программирования C.
Код содержит объявление структуры Student
с полями name
(имя), surname
(фамилия), sexist
(пол) и age
(возраст).
В функции main
происходит открытие файла student1.txt
для чтения, заполнение массива структур student
данными из файла и закрытие файла.
Затем в цикле while
происходит получение запроса от пользователя (1- поиск по имени Elena
, 2- поиск по возрасту, 3- выход из программы, 4- ошибка).
В функции SearchByName
происходит поиск всех структур Student
с указанным именем и выводится на экран информация об этих структурах.
Аналогично в функции SearchByAge
происходит поиск всех структур Student
с указанным возрастом и выводится на экран информация об этих структурах.
В данном коде не реализован механизм обработки ошибок при работе с файлом и пользователем, а также нет проверки на завершение ввода данных пользователем.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д