Используя структуру с полями пол, ФИО, возраст, распечатать количество девушек по имени "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 с указанным возрастом и выводится на экран информация об этих структурах.
В данном коде не реализован механизм обработки ошибок при работе с файлом и пользователем, а также нет проверки на завершение ввода данных пользователем.