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

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

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

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

06.04.2010, 16:27. Просмотров 18148. Ответов 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
artem0n2
0 / 0 / 0
Регистрация: 28.10.2009
Сообщений: 67
15.04.2010, 00:40  [ТС] #31
если убрать clscr() то после компиляции программа выводит весь список и зависает, а system("cls");
не решает вопрос с компиляцией
0
Vorona
Peace 2 all shining faces
671 / 533 / 45
Регистрация: 05.03.2010
Сообщений: 1,283
15.04.2010, 01:09 #32
ни разу не пользовался Dev C++(
на счет зависания программы без clrscr() - бред какой-то, но все-же:
может стоит подключить
C
1
#include<stdlib.h>
нашел еще такой вариант:
C
1
system("sh -c clear");
или в папке include в файле conio.h (C:\Dev-Cpp\include\conio.h к примеру) прописать ф-цию clrscr() и постараться ее использовать
C
1
2
3
4
5
6
#include<stdio.h>
#include<stdlib.h>
void clrscr()
{
    system("cls");
}
может кто другой в Dev C++ знает, как очистить экран, если это необходимо, т.к. выше - самые адекватные методы, по моему мнению, которые подсказал гугл
1
artem0n2
0 / 0 / 0
Регистрация: 28.10.2009
Сообщений: 67
15.04.2010, 11:53  [ТС] #33
похоже что проблема не в этой функции.

Добавлено через 6 минут
может лучше совместить первый полурабочий вариант программы со вторым? ту часть где сравнение, а считывание с файла таким и оставить?
0
Vorona
Peace 2 all shining faces
671 / 533 / 45
Регистрация: 05.03.2010
Сообщений: 1,283
15.04.2010, 13:14 #34
попробуйте...
просто у меня все отлично работает и я ничем вам помочь не могу в данной ситуации т.к. не имею опыта в Dev C++, могу код написать, а тут посоветуйтесь с кем-то, у кого встречались данного рода проблемы)
Думаю, если кроме clrscr() компилятор больше не указывает на ошибки, то проблема именно здесь
не могу понять почему этот код не работает
без сортировки
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
#include <stdio.h>
#include <conio.h>
#include <string.h>
 
typedef struct mesto{
        char AS[50];
        char Tel[50];
};
 
typedef struct chelovek{
        char name[100];
        mesto rabota;
};
 
int main()
{
        char Asutus[50];
        for(short a = 0; a < 50; a++)
                Asutus[a] = 0;
        chelovek info[100];
 
        FILE *base;
        base = fopen("f1.txt", "r");
 
        if(!base){
                printf("Impossible to open file\n");
                getch();
                return 1;
        }
 
        char s1;
        char s2;
        long i;
        char buf[3000];
        char temp[100][30];
        char probel[10];
        int ch, j, j1;
 
        for(i = 0; i < 100; i++)
                for(j = 0; j < 30; j++)
                        temp[i][j] = 0;
 
        for(i = 0; i < 3000; i++)
                buf[i] = 0;
 
        ch = 0;
        while(!feof(base))
                buf[ch++] = fgetc(base);
        printf("%s\n", buf);
 
        fclose(base);
 
        j1 = j = 0;
        for(i = 0; i < ch; i++){
                while(buf[i] != '\n')
                        temp[j1][j++] = buf[i++];
                j1++;
                j = 0;
        }
        for(i = j = 0; i < j1;){
                strcpy (info[j].name,       temp[i++]);
                strcpy (info[j].rabota.AS,  temp[i++]);
                strcpy (info[j].rabota.Tel, temp[i++]);
                i++;
                j++;
        }
 
        printf("\nWhat kind of job?\n");
        gets(Asutus);
 
        FILE *out;
        out = fopen("f2.txt", "w");
 
        for(i = 0; i < j1; i++){
                ch = j = 0;
                while(info[i].rabota.AS[j] == Asutus[j]){
                        j++;
                        ch++;
                }
                if(ch-1 == strlen(Asutus)){
                        printf("%s\n", info[i].name);
                        printf("%s\n", info[i].rabota.AS);
                        printf("%s\n", info[i].rabota.Tel);
                        fprintf(out, "%s\n", info[i].name);
                        fprintf(out, "%s\n", info[i].rabota.AS);
                        fprintf(out, "%s\n", info[i].rabota.Tel);
                }
        }
 
        fclose(out);
 
        getch();
        return 0;
}
1
artem0n2
0 / 0 / 0
Регистрация: 28.10.2009
Сообщений: 67
16.04.2010, 13:19  [ТС] #35
да буду шаманить, спасибо за помощь

Добавлено через 18 часов 14 минут
ничего не работает
0
Vorona
Peace 2 all shining faces
671 / 533 / 45
Регистрация: 05.03.2010
Сообщений: 1,283
16.04.2010, 16:11 #36
не компилирует? какие ошибки пишет?
что-то столь простая тема удивительно затягивается...странно
может так?
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
#include <cstdio>
#include <conio.h>
#include <cstring>
 
typedef struct mesto{
        char AS[50];
        char Tel[50];
};
 
typedef struct chelovek{
        char name[100];
        mesto rabota;
};
 
int main()
{
        char Asutus[50];
        for(short a = 0; a < 50; a++)
                Asutus[a] = 0;
        chelovek info[100];
 
        FILE *base;
        base = fopen("f1.txt", "r");
 
        if(!base){
                printf("Impossible to open file\n");
                getch();
                return 1;
        }
 
        char s1;
        char s2;
        long i;
        char buf[3000];
        char temp[100][30];
        char probel[10];
        int ch, j, j1;
 
        for(i = 0; i < 100; i++)
                for(j = 0; j < 30; j++)
                        temp[i][j] = 0;
 
        for(i = 0; i < 3000; i++)
                buf[i] = 0;
 
        ch = 0;
        while(!feof(base))
                buf[ch++] = fgetc(base);
        printf("%s\n", buf);
 
        fclose(base);
 
        j1 = j = 0;
        for(i = 0; i < ch; i++){
                while(buf[i] != '\n')
                        temp[j1][j++] = buf[i++];
                j1++;
                j = 0;
        }
        for(i = j = 0; i < j1;){
                strcpy (info[j].name,       temp[i++]);
                strcpy (info[j].rabota.AS,  temp[i++]);
                strcpy (info[j].rabota.Tel, temp[i++]);
                i++;
                j++;
        }
 
        printf("\nWhat kind of job?\n");
        gets(Asutus);
 
        FILE *out;
        out = fopen("f2.txt", "w");
 
        for(i = 0; i < j1; i++){
                ch = j = 0;
                while(info[i].rabota.AS[j] == Asutus[j]){
                        j++;
                        ch++;
                }
                if(ch-1 == strlen(Asutus)){
                        printf("%s\n", info[i].name);
                        printf("%s\n", info[i].rabota.AS);
                        printf("%s\n", info[i].rabota.Tel);
                        fprintf(out, "%s\n", info[i].name);
                        fprintf(out, "%s\n", info[i].rabota.AS);
                        fprintf(out, "%s\n", info[i].rabota.Tel);
                }
        }
 
        fclose(out);
 
        getch();
        return 0;
}
0
artem0n2
0 / 0 / 0
Регистрация: 28.10.2009
Сообщений: 67
16.04.2010, 17:52  [ТС] #37
так тоже зависает, открывается программа, выводится сразу весь список и винда говорит stopped working. а мой изначальный вариант - там после ввода информации из текстового файла я прописал просто вывод чтобы посмотреть как он видит её, результат тоже очень странный, сначала идёт список весь, затем куча символов.
0
Vorona
Peace 2 all shining faces
671 / 533 / 45
Регистрация: 05.03.2010
Сообщений: 1,283
16.04.2010, 19:07 #38
очередная попытка
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
#include <cstdio>
#include <conio.h>
#include <cstring>
 
typedef struct mesto{
        char AS[50];
        char Tel[50];
};
 
typedef struct chelovek{
        char name[100];
        mesto rabota;
};
 
int main()
{
        char Asutus[50];
        for(short a = 0; a < 50; a++)
                Asutus[a] = 0;
        chelovek info[100];
 
        FILE *base;
        base = fopen("f1.txt", "r");
 
        if(!base){
                printf("Impossible to open file\n");
                getch();
                return 1;
        }
 
        char s1;
        char s2;
        long i;
        char buf[3000];
        char temp[100][30];
        char probel[10];
        int ch, j, j1;
 
        for(i = 0; i < 100; i++)
                for(j = 0; j < 30; j++)
                        temp[i][j] = 0;
 
        for(i = 0; i < 3000; i++)
                buf[i] = 0;
 
        ch = 0;
        while(!feof(base))
                buf[ch++] = fgetc(base);
        printf("%s\n", buf);
 
        fclose(base);
 
        j1 = j = 0;
        for(i = 0; i < ch; i++){
        if(buf[i] != '\n')
            temp[j1][j++] = buf[i];
        else{
            j1++;
            j = 0;
        }
            
        }
        for(i = j = 0; i < j1;){
                strcpy (info[j].name,       temp[i++]);
                strcpy (info[j].rabota.AS,  temp[i++]);
                strcpy (info[j].rabota.Tel, temp[i++]);
                i++;
                j++;
        }
 
        printf("\nWhat kind of job?\n");
        gets(Asutus);
 
        FILE *out;
        out = fopen("f2.txt", "w");
 
        for(i = 0; i < j1; i++){
                ch = j = 0;
                while(info[i].rabota.AS[j] == Asutus[j]){
                        j++;
                        ch++;
                }
                if(ch-1 == strlen(Asutus)){
                        printf("%s\n", info[i].name);
                        printf("%s\n", info[i].rabota.AS);
                        printf("%s\n", info[i].rabota.Tel);
                        fprintf(out, "%s\n", info[i].name);
                        fprintf(out, "%s\n", info[i].rabota.AS);
                        fprintf(out, "%s\n", info[i].rabota.Tel);
                }
        }
 
        fclose(out);
 
        getch();
        return 0;
}
заставить ее работать))
если что, замените заголовочные файлы
C
1
2
3
#include <cstdio>
#include <conio.h>
#include <cstring>
на
C
1
2
3
#include <stdio.h>
#include <conio.h>
#include <string.h>
1
artem0n2
0 / 0 / 0
Регистрация: 28.10.2009
Сообщений: 67
16.04.2010, 19:14  [ТС] #39
этот вариант не зависает, он выводит весь список сначала, затем спрашивает работу, и потом ничего не происходит, ни сравнение не запись... но зато ввод данных из файла работает правильно
0
Vorona
Peace 2 all shining faces
671 / 533 / 45
Регистрация: 05.03.2010
Сообщений: 1,283
16.04.2010, 19:29 #40
у нас есть три строки с информацией о человеке, потом пустая строка и новый человек, хм...
на студии переделал, выводит все четко
вот, попробуйте вставить эту строку в 67 строке того кода, что я вам сбросил и проверьте или верно пишет информацию о втором человеке, или нет пропусков или нестыковок и скажите результат)
C
1
printf("\n%s\n%s\n%s", info[1].name, info[1].rabota.AS, info[1].rabota.Tel);
1
Миниатюры
Чтение структуры из файла и запись нового  
artem0n2
0 / 0 / 0
Регистрация: 28.10.2009
Сообщений: 67
16.04.2010, 19:49  [ТС] #41
выводит сначала последнего из списка, потом второго несколько раз 0о
0
Миниатюры
Чтение структуры из файла и запись нового  
Vorona
Peace 2 all shining faces
671 / 533 / 45
Регистрация: 05.03.2010
Сообщений: 1,283
16.04.2010, 20:15 #42
извините, не тот код посмотрел напишите за циклом(70 строка), чтоб после копирования из массива строк мы увидели или правильно все переписалось в структуру
0
artem0n2
0 / 0 / 0
Регистрация: 28.10.2009
Сообщений: 67
16.04.2010, 20:51  [ТС] #43
всех переписывает правильно но вот в конец ещё раз добавляет второго человека зачемто
0
Vorona
Peace 2 all shining faces
671 / 533 / 45
Регистрация: 05.03.2010
Сообщений: 1,283
16.04.2010, 20:54 #44
не добавляет а просто выводит на экран информацию о втором, просто я хотел проверить или все правильно в структуру на вашем компиляторе переписывает
если все совпадает, то можете удалить эту (70) строку
так в чем тогда проблема, почему при введении названия работы, программа не выводит информации о человеке....? вы все правильно вводите?
0
artem0n2
0 / 0 / 0
Регистрация: 28.10.2009
Сообщений: 67
16.04.2010, 21:07  [ТС] #45
да, ввожу правильно, сам не пойму в чём дело
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.04.2010, 21:07
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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