0 / 0 / 0
Регистрация: 16.05.2020
Сообщений: 7
1

Задача ++

16.05.2020, 13:31. Показов 198. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите, пожалуйста, исправить
КОММЕНТАРИЙ: Функция vivod1. Выполните программу по шагам, следя за контрольными значениями. Вспомните, что возвращает функция fscanf_s в вызывающую программу.
Не работает поиск в текстовом файле (ret). Посмотрите, что возвращает функция fopen_s.
Нет возврата записи в вызывающую программу в функции verni. Возвращается результат функции fread - количество прочитанных записей.Надо изменить тип перед именем функции на тип структуры.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include <time.h>
 
struct T
{
    char AVTOR[20];
    char BOOK[25];
    char IZDANIE[15];
    int year;
}z;
 
int sozd(int n)
{
    FILE* f;
    //struct T z;// создание файла
    int i = 0;
    if ((fopen_s(&f, "FB.txt", "wb")) != 0)// если файл не откроется...
        return -1;//... возвращает -1 и заканчивает программу
    else
    {
        for (; i < n; i++)
        {
            scanf_s("%20s", z.AVTOR, 20);
            scanf_s("%25s", z.BOOK, 25);
            scanf_s("%15s", z.IZDANIE, 15);
            scanf_s("%d", &z.year);
            fwrite(&z, sizeof(z), 1, f);// записывает массив размером z
        }
        fclose(f);
    }
    return 0;
}
 
int vivod(int* k)
{
    FILE* f;
    //struct T z; //объявление структуры
    *k = 0;// k = ноль
    if ((fopen_s(&f, "FB.txt", "rb")) != 0) //откроется файл или нет, если нет то выходишь
        return -1;
 
 
    while (fread(&z, sizeof(z), 1, f) == 1)//пока файл открыт 
    {
        printf("\n%s\t%s\t%s\t%d", z.AVTOR, z.BOOK, z.IZDANIE, z.year);//ввод значений файла
        (*k)++;// увеличение адреса файла
    }
    fclose(f);// закрыть файл
    return 0;
}
int sozd1(int n)
{
    FILE* f;
    //struct T z;// создание файла
    int i = 0;
    if ((fopen_s(&f, "FT.txt", "w")) != 0)// если файл не откроется...
        return -1;//... возвращает -1 и заканчивает программу
    else
    {
        for (; i < n; i++)
        {
            scanf_s("%20s", z.AVTOR, 20);
            scanf_s("%25s", z.BOOK, 25);
            scanf_s("%15s", z.IZDANIE, 15);
            scanf_s("%d", &z.year);
            fprintf(f, "%20s\n", z.AVTOR, 20);
            fprintf(f, "%25s\n", z.BOOK, 25);
            fprintf(f, "%15s \n", z.IZDANIE, 15);
            fprintf(f, "%d\n", z.year);
        }
        fclose(f);
    }
    return 0;
}
 
int vivod1(int* k)
{
    FILE* f;
    struct T z; //объявление структуры
    *k = 0;// к = ноль
    if ((fopen_s(&f, "FT.txt", "r")) != 0) //откроется файл или нет, если нет то выход
        return -1;
 
 
    while (fscanf_s(f, "%20s%25s%15s%d", z.AVTOR, 20, z.BOOK, 25, z.IZDANIE, 15, &z.year) == 1)//пока файл открыт 
    {
        printf("\n%s\t%s\t%s\t%d", z.AVTOR, z.BOOK, z.IZDANIE, z.year);//ввод значений файла
        (*k)++;// увеличение адреса файла
    }
    fclose(f);// закрыть файл
    return 0;
}
 
int ret(int n, int* k)
{
    *k = 0;
    FILE* f;
    if ((fopen_s(&f, "FB.txt", "r+") != 0)) {
        fscanf_s(f, "%20s%25s%15s%d", z.AVTOR, 20, z.BOOK, 25, z.IZDANIE, 15, &z.year);
        printf("%20s%25s%15s%d\n", z.AVTOR, 20, z.BOOK, 25, z.IZDANIE, 15, z.year);
        while (!feof(f)) {
            if (z.year == n)
                (*k)++;
        }
    }
    if (fclose(f) == EOF) return -1;
    else return 0;
}
int verni(int n) {
    FILE* f;
    struct T z;
    if ((fopen_s(&f, "FB.txt", "rb+")) != 0)
        return -1;
    int k = fseek(f, n * sizeof(z), SEEK_SET);//перемещает указатель в начало файла
    if (k == 0) {
        return fread(&z, sizeof(z), 1, f);
        fclose(f);
    }
}
    void main()
    {
        int n, k, o, a, b, c, d, a1, b1;
        int p = 7;
        scanf_s("%d", &n);
        a = sozd(n);
        b = vivod(&n);
        a1 = sozd1(n);
        b1 = vivod1(&n);
        c = ret(p, &o);
        d = verni(n);
    }
Добавлено через 9 минут
Описать структуру Т, содержащую след сведения : фамилия автора, название книги, издательство, год издания. Написать функции, выполняющие следующие действия:
sozd, vivod, sozd1, vivod1 сначала для двоичного, потом для текстового файла ( Создание двоичного файла FB.txt, содержащего N элементов типа Т. Функция возвращает 0 при успешном завершении и -1 в противном случае.
Вывод на экран содержимого FB.txt. Функция возвращает в вызывающую программу количество записей через параметр k, а также 0 при успешном завершении и -1 в противном случае.)
ret в двоичном (возврат в вызывающую программу количества книг указанного года издания)
verni в текстовом (возвращение в вызывающую программу записи под номером n)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.05.2020, 13:31
Ответы с готовыми решениями:

Задача со строками. Задача находится на фотке, которая прикреплена к сообщению
Фотку прикрепил к сообщению. П.5.4. Правил Запрещено создавать темы с бессмысленными названиями...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Параллельный Кот
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
16.05.2020, 13:34 2
Цитата Сообщение от hochyprogr Посмотреть сообщение
Написать функции, выполняющие следующие действия: sozd, vivod, sozd1, vivod1
Это где такие задания выдают? Дальше читать нет никакого желания.
0
0 / 0 / 0
Регистрация: 16.05.2020
Сообщений: 7
16.05.2020, 13:37  [ТС] 3
Лабораторная
0
16.05.2020, 13:37
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru