Используя структуру с полями пол, ФИО, возраст, распечатать количество девушек по имени "Elena" - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Используя структуру с полями пол, ФИО, возраст, распечатать количество девушек по имени "Elena" и имена тех, кому 19 лет. (Данные находятся в файле.) Структуру пишу во 2-ой раз в жизни, поэтому заранее извиняюсь, если что-то совсем уж не так. Функции ничего не возвращают. Всё также по методике, как в моей первой, но эта не хочет работать. Помогите, найти ошибки и приблизиться к разгадке тайн языка си)
#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"»

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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.636 из 5
Похожие ответы