Сформировать файл “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”. Напечатать список студентов мужского пола с указанием их возраста. Проблема с кодировкой»

textual
Листинг программы
#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 - возраст). Также, подсчитывается средний возраст студентов. Наконец, файл закрывается.

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


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

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

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