Сформировать файл “stud”. Напечатать список студентов мужского пола с указанием их возраста. Проблема с кодировкой - C (СИ)
Формулировка задачи:
Задача
Сформировать файл “stud”, имеющий следующую структуру: фамилия студента, пол(буква), год рождения. Напечатать список студентов мужского пола с указанием их возраста. Решение:#include <stdio.h>
#include <string.h>
#define N 1
struct swed
{
char fio[31];
char pl;
int god;
};
int main()
{
struct swed d[N];
FILE * f;
int i, t, k;
if((f = fopen("D:\\f.txt", "wb")) != NULL)
{
for(i = 0; i < N; i++)
{
printf("prizv: ");
gets(d[i].fio);
printf("pol : ");
d[i].pl = getchar();
printf("god r.: ");
scanf("%d", &d[i].god);
puts("");
fflush(stdin);
}
{
fwrite(d, sizeof(swed), N, f);
fclose(f);
}
}
if((f = fopen("D:\\f.txt", "rb")) != NULL)
{
fread(d, sizeof(swed), N, f);
t = k = 0;
for(i = 0; i < N; i++)
{
if(d[i].pl == 'm')
{
printf("%s\t( %d )\n", d[i].fio, 2014 - d[i].god);
t += 2014 - d[i].god;
k++;
}
}
if(k > 0)
printf("\Seredniy vik = %g\n", (float)t / k);
fclose(f);
}
return 0;
}Решение задачи: «Сформировать файл “stud”. Напечатать список студентов мужского пола с указанием их возраста. Проблема с кодировкой»
#include <stdio.h>
#include <string.h>
#define N 2
struct swed
{
char fio[31];
char pl;
int god;
};
int main()
{ struct swed d[N];
FILE *fin, *fout;
int i, t, k;
if((fin = fopen("D:\\f.txt", "wb")) != NULL)
{
for(i = 0; i < N; i++)
{
printf("prizv: ");
gets(d[i].fio);
printf("pol : ");
d[i].pl = getchar();
printf("god r.: ");
scanf("%d", &d[i].god);
puts("");
fflush(stdin);
}
fwrite(d, sizeof(swed), N, fin);
fclose(fin);
}
if((fout = fopen("D:\\f.txt", "rb")) != NULL)
{
fread(d, sizeof(swed), N, fout);
t = k = 0;
for(i = 0; i < N; i++)
{ if(d[i].pl == 'm')
{ printf("%s\t( %d )\n", d[i].fio, 2014 - d[i].god);
t += 2014 - d[i].god;
k++;
}
}
if(k > 0)
printf("Seredniy vik = %lf\n", (double)t / k);
fclose(fout);
}
getchar();
return 0;
}
Объяснение кода листинга программы
В этом коде используется язык программирования C.
Структура данных swed определена для представления информации о студентах. Каждый элемент структуры содержит имя студента (максимум 30 символов), пол студента и возраст студента.
В функции main() создается два массива структур swed - один для чтения данных из файла и один для записи данных в файл.
Затем происходит открытие файла D:\\f.txt для записи (режим wb).
Далее, в цикле, происходит заполнение массива структур swed данными, введенными пользователем.
После заполнения массива, данные записываются в файл.
Затем, файл закрывается.
После этого, файл открывается для чтения (режим rb).
Затем, в цикле, происходит чтение данных из файла в массив структур swed.
Далее, для каждого элемента массива проверяется пол студента. Если пол студента мужской, выводится имя студента и его возраст (2014 - возраст).
Также, подсчитывается средний возраст студентов.
Наконец, файл закрывается.