Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 103, средняя оценка - 4.93
artem0n2
0 / 0 / 0
Регистрация: 28.10.2009
Сообщений: 67
#1

Чтение структуры из файла и запись нового - C++

06.04.2010, 16:27. Просмотров 18126. Ответов 72
Метки нет (Все метки)

Из файла вводятся записи структурой
имя - стринг,
ТК - место работы тоже структура из AS - место (стринг), Tel - телефон
с клавиатуры вводится стринг Asutus (место работы)
программа записывает во второй файл записываются совподающие по месту работы люди и их данные.

можно ли так записать структуру в структуре?
как сделать правильное считывание данных по нескольким людям с файла?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include <string.h>
 
typedef struct {
        char name[100]; //имя человека
        typedef struct { //структура для места работы этого человека
                char AS[50]; //название места
                int Tel; //телефон
                } mesto;
                } chelovek;
main() {
       int i=0; j=0;
       char Asutus[50]; //то место работы которое вводится с клавиатуры и с ним идёт потом сравнение
       mesto data[500]; //массивы
       chelovek info[500];
       FILE *base; //хз шаблон
       base=fopen("f1.txt","r");
       do {
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.04.2010, 16:27
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Чтение структуры из файла и запись нового (C++):

Запись и чтение структуры в/из файла - C++
Столкнулся с очередной проблемой. Есть несколько участков кода: Структура &quot;Абонент&quot;: struct Subscriber { char FIO ; ...

Запись и чтение структуры из файла - C++
Здравствуйте, у меня дано такое задание: Составить программу &quot;Список студентов группы&quot;, в котором указаны - Фамилия,Имя,пол, место...

Запись структуры и её чтение из файла - C++
пробовал разными способами, ничего не работает, не записывает и не считывает ...

Запись и чтение структуры с файла - C++
Привет всем.Столкнулся с проблема записи структуры в файл и чтения ее из файла.Вот сама структура: struct papa { vector&lt;string&gt; v;...

Запись/чтение вектора в/из файла.Структуры - C++
Доброе время суток.Проблема заключается в следующем: в файл идет запись вектора (запись вроде-бы успешна,насколько я могу судить).После...

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

72
Deicider
96 / 52 / 1
Регистрация: 18.03.2009
Сообщений: 273
06.04.2010, 16:44 #2
Зачем так извращенно? сначала объявляешь одну структуру, потом вторую, в которой одна из переменных будет объектом первой структуры.
Далее вопрос уже к Вам: чтобы сказать, как правильно прочитать, сначала объясните, как вы в файл пишите?
0
artem0n2
0 / 0 / 0
Регистрация: 28.10.2009
Сообщений: 67
06.04.2010, 16:59  [ТС] #3
как так сделать по отдельности но чтобы одна зависела от другой я не знаю, в задании также не уточнено как писать в файл, наверно можно по порядку типо:
Коля
Гасторбайтор
0302011

Вася
Рыболов
0203011
0
Deicider
96 / 52 / 1
Регистрация: 18.03.2009
Сообщений: 273
06.04.2010, 17:00 #4
Ясно. Данные по человеку будут записаны в файле в три строки, каждая заканчивающася на \n. Первая строка – имя, вторая – место, третья – телефон. Писать в файл прямо строками функцией fputs. Потом читать из файла по строкам функцией fgets.

Тип переменной телефона тоже сделай строкой.
0
artem0n2
0 / 0 / 0
Регистрация: 28.10.2009
Сообщений: 67
06.04.2010, 17:03  [ТС] #5
хорошо, чтото уже проясняется
0
Deicider
96 / 52 / 1
Регистрация: 18.03.2009
Сообщений: 273
06.04.2010, 17:13 #6
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Вот код чтения. Сам не компилил, так что заранее извиняюсь, если где-то косяк будет какой-нибудь. Думаю, ход мысли будет понятен.

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
typedef struct
{ //структура для места работы этого человека
char AS[50]; //название места
char Tel[15]; //телефон
} mesto;
 
typedef struct
{
char name[100]; //имя человека
mesto rabota;
} chelovek;
 
main()
{
    char Asutus[50]; //то место работы которое вводится с клавиатуры и с ним идёт потом сравнение
    chelovek info[500];
    FILE *base;
    base=fopen("f1.txt","r");
    int i = 0;
    char buf[100];
    while (!feof(base))
    {
        fgets (buf, 100, base);
        strcpy (info[i].name, buf);
 
        fgets (buf, 50, base);
        strcpy (info[i].rabota.AS, buf);
 
        fgets (buf, 15, base);
        strcpy (info[i].rabota.Tel, buf);
        
        i++;
    }
}
3
artem0n2
0 / 0 / 0
Регистрация: 28.10.2009
Сообщений: 67
06.04.2010, 17:24  [ТС] #7
о спасибо большое, сколько не искал примеров, вы мне самый простой и понятный дали
теперь дело за сравнением и упорядочиванием, думаю справлюсь!
0
Deicider
96 / 52 / 1
Регистрация: 18.03.2009
Сообщений: 273
06.04.2010, 18:03 #8
Да не за что )))

Кстати, я бы вообще не делал две структуры, а сделал бы одну. Не вижу реального смысла нагромождать отдельно место работы, если в программе не предполагается создание отдельных объектов этого типа.
0
artem0n2
0 / 0 / 0
Регистрация: 28.10.2009
Сообщений: 67
06.04.2010, 18:17  [ТС] #9
я бы вообще всё что можно упростил, но по заданию надо сделать так
0
artem0n2
0 / 0 / 0
Регистрация: 28.10.2009
Сообщений: 67
08.04.2010, 15:17  [ТС] #10
только почемуто это дело всё зависает) хотя код вроде без ошибок
0
Deicider
96 / 52 / 1
Регистрация: 18.03.2009
Сообщений: 273
08.04.2010, 16:25 #11
Что значит зависает? Цикл, завязанный на условие feof, просто не может зациклиться навечно. Файл-то закончится рано или поздно. В цикле же ты не применяешь fseek, значит не должно зацикливаться.
0
artem0n2
0 / 0 / 0
Регистрация: 28.10.2009
Сообщений: 67
08.04.2010, 22:21  [ТС] #12
что не так со сравнением блин?
C++
1
2
3
4
5
for(i=0; i>0; i++); {
                 int stricmp(const char *info[i].rabota.AS, const char *Asutus);
                 if(info[i].rabota.AS == Asutus);
                 printf("\n %s %d \n", info[i].name,info[i].rabota.Tel);
                 }
Добавлено через 8 минут
на счёт зависания, это я файл не в той папке создал =) мой косяк
0
accept
4831 / 3252 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
09.04.2010, 06:14 #13
Цитата Сообщение от Deicider
Цикл, завязанный на условие feof, просто не может зациклиться навечно. Файл-то закончится рано или поздно.
feof() проверяет флажок в структуре FILE
как меняется флажок

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <stdlib.h>
 
int main(void) /* ANSI C89 */
{
    FILE *ifp;
    int c;
    
    ifp = fopen("file.txt", "r");
    
    printf("0x%x" "\n", ifp->_flags);
    
    while ((c = getc(ifp)) != EOF)
        putchar(c);
 
    printf("0x%x" "\n", ifp->_flags);
    
    fclose(ifp);
    
    return EXIT_SUCCESS;
}

флажок может и не установиться
в его случае - ошибка открытия файла, а ещё может быть ошибка чтения файла
1
artem0n2
0 / 0 / 0
Регистрация: 28.10.2009
Сообщений: 67
09.04.2010, 23:35  [ТС] #14
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
#include <stdio.h>
#include <conio.h>
#include <string.h>
 
typedef struct
{ 
char AS[50];
char Tel[50];
} mesto;
 
typedef struct
{
char name[100];
mesto rabota;
} chelovek;
 
main()
{
        char Asutus[50];
        chelovek info[500];
        FILE *base;
        base=fopen("f1.txt","r");
        int i = 0;
        char buf[100];
        while(!feof(base))
        {
 
                fgets (buf, 100, base);
                strcpy (info[i].name, buf);
 
                fgets (buf, 50, base);
                strcpy (info[i].rabota.AS, buf);
 
                fgets (buf, 50, base);
                strcpy (info[i].rabota.Tel, buf);      
                i++;
        }
        printf("What kind of job?  ");
        scanf("%s", &Asutus);
        
for(int i = 0;i<99;i++){
        if(strcmp(info[i].rabota.AS, Asutus) == 1){
                                      printf("%s",info[i].name);
                                      printf("%s",info[i].rabota.AS);
                                      printf("%s",info[i].rabota.Tel);
                                      }
        
        
        }
        
 
getch();
}
вот рабочий вариант, теперь надо где-то найти, как сделать упорядочивание по имени в алфавитном порядке, ещё не нашёл.
0
accept
4831 / 3252 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
12.04.2010, 10:28 #15
C
1
2
3
4
5
6
7
8
9
10
11
12
int cmpfunc(const void *, const void *);
 
...
 
qsort(info, 99, sizeof info[0], &cmpfunc);
 
...
 
int cmpfunc(const void *s1, const void *s2)
{
    return strcmp(((chelovek *) s1)->name, ((chelovek *) s2)->name);
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.04.2010, 10:28
Привет! Вот еще темы с ответами:

Ansi c, запись и чтение структуры из файла. Накосячил от души - C++
Прошу прощения за глупую тему, но я мучаюсь уже долго, сам не могу решить проблему. структура struct rent { char...

Запись структуры и чтение из файла в структуру ( как бы лучше ) - C++
Подкиньте идею как лучше записать структуру в файл и обратно из файла в структуру У меня есть мысль: даны 4 элемента вводим их в...

Запись структуры в файл, чтение из файла и удаление (файловый ввод/вывод) - C++
Добрый вечер! Возникла такая проблема, что при добавлении записи, удаляются уже имеющиеся записи в файле. Также не помешала бы помощь в...

Чтение/запись структуры "Клиент" из текстового файла - C++
Здравствуйте. Помогите вывести данные из текстового файла обратно в программу. У меня есть некая структура, и функция которая пишет...


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

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

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