Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
SlimRG
0 / 0 / 0
Регистрация: 31.08.2015
Сообщений: 22
1

Чтение структуры из файла

25.04.2018, 13:22. Просмотров 362. Ответов 2

Добрый вечер!
Курсач горит - все готово, но при чтении структуры из файла - fread выдает ноль
Уже что только не делал - что только не предпринимал - никак не помогает
Если поможете - буду очень вам благодарен!

ЗАГОЛОВОК
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#ifndef STUDLIST_H
#define STUDLIST_H
 
#include <stdbool.h>  // Библиотека boolean
 
typedef struct {
    char name[255];          // Формат: Иванов И.И.
    bool geschlecht;   // Пол (0 - мужской, 1 - женский)
    unsigned int schule;  // Школа (Диаползон номеров: [1-999999999], 0 - без школы (например дом. обучекние)
    bool medaille;     // Есть ли медаль (1 - есть, 0 - отсутствует)
    char note;            // Оценка (Диапозон [0-250], 251 - нет оценки
    bool arechnung;       // Зачет по сочинению (1 - да, 0 - нет)
 
} studlist;
 
#endif // STUDLIST_H
Writer
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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
#pragma hdrstop
#pragma argsused
 
#include <stdio.h>
#include <stdlib.h>
#include "studlist.h" //Структура
 
#ifdef _WIN32
#include <tchar.h>
#else
typedef char _TCHAR;
#define _tmain main
#endif
 
bool writeperson(studlist *stud_TStringList) {
    // Добавляем имя
    bool good;
    unsigned int count = 0;
    char temp = '1';
 
    good = false;
    while (good == false) {
        count = 0;
        temp = '1';
 
        printf("Vvedite name - format: Slim.R.G.\n");
        stud_TStringList->name[count]= getchar();
        while ((stud_TStringList->name[count] != '\n') && (count < 255)){
         count++;
         stud_TStringList->name[count]= getchar();
        }
        stud_TStringList->name[count]= NULL;
        count=0;
 
        // Добавляем пол
        printf("VVedite pol (0 - man, 1 - woman)\n");
        scanf("%u", &count);
        if (count == 1) {
            stud_TStringList->geschlecht = true;
        }
        else {
            stud_TStringList->geschlecht = false;
        }
 
        // Вводим номер школы
        printf("Vvedite nomer schule, esli net - 0\n");
        scanf("%u", &count);
        stud_TStringList->schule = count;
 
        // Проверка на медаль
        printf("Est li medal? (1- yes, 0 - no)\n");
        scanf("%u", &count);
        if (count == 1) {
            stud_TStringList->medaille = true;
        }
        else {
            stud_TStringList->medaille = false;
        }
 
        // Вводим оценку
        printf("Vvedite note \n");
        scanf("%u", &count);
        stud_TStringList->note = count;
 
        // Проверка на зачет
        printf("Est li zachet? (1 - yes, 0 - no)\n");
        scanf("%u", &count);
        if (count == 1) {
            stud_TStringList->arechnung = true;
        }
        else {
            stud_TStringList->arechnung = false;
        }
 
        // Запрос на правильность
 
        system("cls"); // FOR WINDOWS ONLY
        // system("clear"); //FOR LINUX ONLY
 
        printf("-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\n");
        printf("Proverte pravilnost'\n");
        printf("-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\n");
        printf("Name: ");
        printf(stud_TStringList->name);
        printf("\nPol: ");
        if (stud_TStringList->geschlecht == true) {
            printf("woman\n");
        }
        else {
            printf("man\n");
        }
        printf("School: ");
        printf("%u", stud_TStringList->schule);
        printf("\nMedal: ");
        if (stud_TStringList->medaille == true) {
            printf("est'");
        }
        else {
            printf("net");
        }
        printf("\nOchenka: ");
        printf("%u", stud_TStringList->note);
        printf("\nZachet: ");
        if (stud_TStringList->arechnung == true) {
            printf("est'\n");
        }
        else {
            printf("net\n");
        }
 
        printf("-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\n");
        printf("Vse verno? (1 - yes, 0 - no)\n");
        scanf("%u", &count);
        if (count == 1) {
            good = true;
        }
        temp = '1';
        while ((temp != EOF) && (temp != '\n')) {
            scanf("%c", &temp);
        };
    }
 
    // Добавить еще пользователя
    printf("dobavit echo studentov? (1 - yes, 0 - no)\n");
    scanf("%u", &count);
    temp = '1';
    while ((temp != EOF) && (temp != '\n')) {
        scanf("%c", &temp);
    };
 
    if (count == 1) {
        return true;
    }
    else {
        return false;
    }
 
}
 
int _tmain(int argc, _TCHAR* argv[]) {
    char *adress;
    unsigned long long int count;
    char  temp;
    FILE *output;
    studlist stud_TStringList;
    //Ввод адресса файла сохранения
    printf("Enter the file address\n");
    adress = NULL;
    count = 0;
    temp = '1';
 
    while ((temp != EOF)&&(temp != '\n')){
      adress = (char*)realloc(adress, ((count+1)*sizeof(char)));
      temp = getchar();
      if ((temp != EOF)&&(temp != '\n')){
          adress[count]=temp;
          count++;
          if (count >= 184467440737095){
              printf("Previsinaa max dlina");
              return 60;
          }
 
      }
    }
   adress[count]=NULL;
 
 
   // Открываем файл
   output = fopen(adress, "w");
   if (!output) {
      printf("Can't open file");
      return 404;
    }
 
   //Заливаем данные
 
   while (writeperson(&stud_TStringList) == true){
    fwrite(&stud_TStringList, sizeof(studlist), 1, output);
   }
   fwrite(&stud_TStringList, sizeof(studlist), 1, output);
   fclose(output);
    system("pause");
    return 0;
}
Reader
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
#pragma hdrstop
#pragma argsused
 
#include <stdio.h>
#include <stdlib.h>
#include "studlist.h"
 
#ifdef _WIN32
#include <tchar.h>
#else
typedef char _TCHAR;
#define _tmain main
#endif
 
int _tmain(int argc, _TCHAR* argv[]) {
    char oc;
    char *adress;
    unsigned long long int count;
    char temp;
    FILE *input;
    studlist stud_TStringList;
    // Ввод адресса файла сохранения
    printf("Enter the file address\n");
    adress = NULL;
    count = 0;
    temp = '1';
 
    while ((temp != EOF) && (temp != '\n')) {
        adress = (char*)realloc(adress, ((count + 1)*sizeof(char)));
        temp = getchar();
        if ((temp != EOF) && (temp != '\n')) {
            adress[count] = temp;
            count++;
            if (count >= 1844674) {
                printf("Previsinaa max dlina");
                return 60;
            }
 
        }
    }
    adress[count] = NULL;
    count = 0;
    // Открываем файл
    input = fopen(adress, "r");
    if (!input) {
        printf("Can't open file");
        return 404;
    }
 
    printf("Vvedite minimalnuu udovletv. ochenku\n");
    scanf("%d", &oc);
    printf("%d", (fread(&stud_TStringList, sizeof(studlist), 1, input)));
    while (fread(&stud_TStringList, sizeof(studlist), 1, input) == 1) {
        // if (stud_TStringList.note < oc) {
        // printf("=====================\n");
        //printf("%s", stud_TStringList.name);
        // printf("%s,", '\n');
        system("pause");
        // }
    }
 
    system("pause");
    return 0;
}
Добавлено через 12 минут
Судя по отладке - записывает верно, а вот с чтением бяда

Добавлено через 17 часов 9 минут
Нашел ошибку - можно закрывать
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.04.2018, 13:22
Ответы с готовыми решениями:

Чтение структуры из файла
(программа на С) В общем, задача написать программу, которая из файла вида: будет заносить...

Запись и чтение структуры из файла
Нужно ввести структуру с клавиатуры, записать её в файл и потом прочитать из него. Пока что читает...

Чтение структуры из файла и вывод на дисплей
Задание: Записать структуру(информация о студенте:имя курс год рост) в файл. Добавить сведения...

Чтение структуры из файла и вывод на экран
Подскажите, пожалуйста, как считать подобную структуру из файла? 1. Вопрос, состоящий из...

Построчное чтение из файла, заполнение структуры и запись в бинарный файл
Здравствуйте. Пытаюсь сделать чтение из текстового файла построчно, а затем сразу забиваю в...

2
student8102
Заблокирован
25.04.2018, 20:04 2
Цитата Сообщение от SlimRG Посмотреть сообщение
Нашел ошибку - можно закрывать
Что за ошибка?
0
SlimRG
0 / 0 / 0
Регистрация: 31.08.2015
Сообщений: 22
25.04.2018, 20:57  [ТС] 3
Запуск из папки с запрещенной записью
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.04.2018, 20:57

Запись структуры в файл и чтение из него
Да, знаю, на форуме полно подобных тем, но у меня немного другой вопрос, как через fwrite и fread...

Запись структуры в бинарный файл и чтение из него
Доброго времени суток. Заранее прошу прощения, если такая тема уже была, но я ничего не смог найти...

Структуры данных-стек. Чтение головного элемента
не понимаю что подразумевает эта функция. написано &quot;Возможны три операции со стеком: добавление...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru