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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
kirillyu
0 / 0 / 0
Регистрация: 14.06.2013
Сообщений: 10
#1

Создать очередь из файла, совершение операций надо очередью(удаление элемента, добавление, запись в файл, вывод) - C++

14.06.2013, 21:32. Просмотров 1279. Ответов 20
Метки нет (Все метки)

Друзья, завтра сдать курсач, неделю парился с кодом. В итоге ничего дельного не вышло. Обращаюсь к вам, умельцы, за скорой помощью. Итак требуется: Создать очередь из файла, совершение операций надо очередью(удаление элемента, добавление, запись в файл, вывод). Проблема в том что почему то не выполняется dobase и я не знаю как выводить полученную очередь. На счет остального задания надеюсь и сам справлюсь но от помощи не откажусь. з.ы. Файл в конце.
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
 
struct dan
{
  char nazv[15];
  char age2[15];
  char pol[15];
  char kurs[15];
  dan *next;
};
char getworld (FILE *vvod,char *kon,char word)
{
    int i=0;
    while (word!='~')
    {
        *(kon+i)=word;
        word=getc(vvod);
        i++;
    }
    return word;
}
 
void dobase (dan **top)
     {
            FILE *vvod;
            vvod=fopen("base.txt","r");
            dan *per, sled;
            char ch;
            ch=getc(vvod);
            sled=*((dan*)malloc(sizeof(dan)));
            per=(dan*)malloc(sizeof(dan));
            while (ch!=EOF)
            {
                strcpy(per->nazv,sled.nazv);
                strcpy(per->age2,sled.age2);
                strcpy(per->pol,sled.pol);
                strcpy(per->kurs,sled.kurs);
                per->next=(*top);
                (*top)=per;
            }
            puts("1");
            free(&sled);
            free(per);
     }
 
main()
{
    dan* top=NULL;
    top=(dan*)calloc(100,sizeof(dan));
    FILE *vvod;
    dobase(top);  //xz//xzxzxz
}
так же имеется вариант который пробовал осилить до этого но там полная неразбериха)
тут как я понимаю не правильно работает клинер добавив его выводит только первую строку файла.

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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
 
struct dan
{
  char nazv[15];
  char age[15];
  char sex[15];
  char kurs[15];
  dan *next;
};
 
char getword(FILE *vvod, char *konstop,char c)
{
int i=0;
char razdel;
char slovo;
while (razdel!='~');
{
    *(konstop+i)=slovo;
    slovo=c;
    c=getc(vvod);
    i++;
}
    return c;
}
 
void cleaner(char *elem,int n)
{
   int i;
    for(i=0;i<n;i++)
    {
        *(elem+i)=NULL;
    }
}
 
void cleanerall(dan *pal)
{
    cleaner(&pal->nazv[1],15);
    cleaner(&pal->age[1],15);
    cleaner(&pal->sex[1],15);
    cleaner(&pal->kurs[1],15);
}
 
dan* dobase(FILE *vvod)
{
    int k;
    k=0;
    char txt;
    dan *pred, *sled, *pt, temp;
    vvod=fopen("base.txt","r");
    txt=getc(vvod);
    while(txt!=EOF)
    {
        sled=(dan*)malloc(sizeof(dan));
        cleanerall(&temp);
        getword(vvod,&temp.nazv[1],txt);
        txt=getc(vvod);
        getword(vvod,&temp.age[1],txt);
        txt=getc(vvod);
        getword(vvod,&temp.sex[1],txt);
        txt=getc(vvod);
        getword(vvod,&temp.kurs[1],txt);
        txt=getc(vvod);
        k++;
         if (k!=1)
         {
             pred->next=sled;
         }
         else pt=sled;
        *sled=temp;
        pred=sled;
        txt=getc(vvod);
        if (txt==('\n')) txt=getc(vvod);
    }
    sled->next=NULL;
    return pt;
}
 
main()
{
 
    dan *pt,*tmp,*amp;
    FILE *vvod;
    tmp=dobase(vvod);
    puts("1")
    while (tmp->next!=NULL)
    {
            printf("%c",tmp->nazv[1]);
            printf("%c",tmp->age[1]);
            printf("%c",tmp->sex[1]);
            printf("%c",tmp->kurs[1]);
            tmp->next=NULL;
    }
 
 
}
заранее благодарен за ЛЮБУЮ оказанную помощь
0
Вложения
Тип файла: txt base.txt (122 байт, 9 просмотров)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.06.2013, 21:32
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Создать очередь из файла, совершение операций надо очередью(удаление элемента, добавление, запись в файл, вывод) (C++):

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

Очередь на базе списка: добавление элемента, удаление, поиск в очереди, вывод на экран - C (СИ)
Может у кого есть готовое решение этого задания, буду Вам очень признателен. Желательно что бы пользователь сам вводил значения с...

Создать односвязный список типа стек, произвести удаление и добавление элемента - Turbo Pascal
Создать односвязный список типа стек. Заменить последний элемент на другой вводимый с клавиатуры. Удалить из списка i-ый элемент...

Надо организовать чтение из файла и запись в файл - Pascal
Есть массив m на n, надо организовать чтение из файла и запись в файл

Ввод с клавиатуры и запись в файл, чтение из файла и запись в массив, вывод из массива на экран - Turbo Pascal
1.Ввод с клавиатуры и запись в файл, чтение из файла и запись в массив, вывод из массива на экран 2.Ввод с клавиатуры и запись в массив,...

Запись в файл, считывание с файла, поиск и удаление - C#
Помогите пожалуйста сделать программу. Должна идти запись в файл, считывание с файла, поиск и удаление. using System; using...

20
Olga_
14.06.2013, 21:38
  #2

Не по теме:

Курсовая... У нас это лабораторная в начале первого курса была

1
kirillyu
0 / 0 / 0
Регистрация: 14.06.2013
Сообщений: 10
14.06.2013, 21:40  [ТС] #3
Добавлено через 36 секунд
Цитата Сообщение от Olga_ Посмотреть сообщение

Не по теме:

Курсовая... У нас это лабораторная в начале первого курса была

быть может осталось чего?
0
Olga_
842 / 184 / 16
Регистрация: 01.08.2011
Сообщений: 502
14.06.2013, 21:42 #4
Цитата Сообщение от kirillyu Посмотреть сообщение
Таки, может осталось чего?

Не по теме:

после кучи экспериментов с компьютером, после некоторых из которых форматировался диск, ничего не осталось. но задачка несложная. максимум часик посидеть

0
kirillyu
0 / 0 / 0
Регистрация: 14.06.2013
Сообщений: 10
14.06.2013, 21:44  [ТС] #5
Цитата Сообщение от Olga_ Посмотреть сообщение

Не по теме:

после кучи экспериментов с компьютером, после некоторых из которых форматировался диск, ничего не осталось. но задачка несложная. максимум часик посидеть

было бы все так солнечно. может подскажешь по взятии данных из файла?
0
Olga_
842 / 184 / 16
Регистрация: 01.08.2011
Сообщений: 502
14.06.2013, 21:47 #6
struct DAN
{
char nazv[15];
char age2[15];
char pol[15];
char kurs[15];
};

...
struct DAN a;
while(fread(&a, sizeof(a), 1, f))
добавление структуры a в очередь
0
kirillyu
0 / 0 / 0
Регистрация: 14.06.2013
Сообщений: 10
14.06.2013, 21:53  [ТС] #7
Цитата Сообщение от Olga_ Посмотреть сообщение
struct DAN
{
char nazv[15];
char age2[15];
char pol[15];
char kurs[15];
};

...
struct DAN a;
while(fread(&a, sizeof(a), 1, f))
добавление структуры a в очередь
спасибо, постараюсь разобраться.
0
kventin_zhuk
БНТУ ФИТР
215 / 155 / 15
Регистрация: 26.12.2012
Сообщений: 382
14.06.2013, 21:59 #8
Olga_, Дело в том, что считывание так будет работать, если записать информацию в файл соответственно:
C++
1
fwrire(&a, sizeof(a), 1, fpout)
т.е файл бинарный

А судя по содержанию файла - у автора текстовый файл. Нужно считывать строку -> разбивать на лексемы -> формироват ьструктуру -> добавлять в очередь.

Автор, а вы вообще саму очередь правильно реализовали, там добавление - удаление из очереди? Могу заготовочку очереди из наработок, если интересно - проинформируйте)
1
Olga_
842 / 184 / 16
Регистрация: 01.08.2011
Сообщений: 502
14.06.2013, 22:02 #9
Цитата Сообщение от kventin_zhuk Посмотреть сообщение
Olga_, Дело в том, что считывание так будет работать...
это и так понятно, что бинарный, а зачем базу данных в текстовом файле хранить. нужно реализовать операции с бинарным файлом (создание, считывание, добавление), а потом подключить очередь
0
GetVariable
163 / 119 / 5
Регистрация: 17.03.2013
Сообщений: 283
14.06.2013, 22:02 #10
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fstream>
 
struct dan
{
  char nazv[15];
  char age2[15];
  char pol[15];
  char kurs[15];
  dan *next;
};
char getworld (FILE *vvod,char *kon,char word)
{
    int i=0;
    while (word!='~')
    {
        *(kon+i)=word;
        word=getc(vvod);
        i++;
    }
    return word;
}
 
void dobase (dan **top)
     {
            std::ifstream vvod("base.txt");
            dan *per, sled;
            char ch;
            ch=vvod.get();
 
            sled=*((dan*)malloc(sizeof(dan)));
            per=(dan*)malloc(sizeof(dan));
            while (ch!=EOF)
            {
                strcpy(per->nazv,sled.nazv);
                strcpy(per->age2,sled.age2);
                strcpy(per->pol,sled.pol);
                strcpy(per->kurs,sled.kurs);
                per->next=(*top);
                (*top)=per;
            }
            puts("1");
            free(&sled);
            free(per);
     }
 
main()
{
    dan* top=NULL;
    top=(dan*)calloc(100,sizeof(dan));
 
    dobase(&top);  //xz//xzxzxz
}
0
kirillyu
0 / 0 / 0
Регистрация: 14.06.2013
Сообщений: 10
14.06.2013, 22:03  [ТС] #11
Цитата Сообщение от kventin_zhuk Посмотреть сообщение
Olga_, Дело в том, что считывание так будет работать, если записать информацию в файл соответственно:
C++
1
fwrire(&a, sizeof(a), 1, fpout)
т.е файл бинарный

А судя по содержанию файла - у автора текстовый файл. Нужно считывать строку -> разбивать на лексемы -> формироват ьструктуру -> добавлять в очередь
Да, именно!

Добавлено через 50 секунд
Цитата Сообщение от Olga_ Посмотреть сообщение
это и так понятно, что бинарный, а зачем базу данных в текстовом файле хранить. нужно реализовать операции с бинарным файлом (создание, считывание, добавление), а потом подключить очередь
в этом задание.
0
kventin_zhuk
БНТУ ФИТР
215 / 155 / 15
Регистрация: 26.12.2012
Сообщений: 382
14.06.2013, 22:07 #12
kirillyu, догда считываете аля

C++
1
2
3
4
5
6
7
8
char str[255]
while (true)
{
    if (feof(fpout))
    break;
    fgets(str, sizeof(str), fpout); // считываем стрку из файла
    // а здесь нужно из строки str вычленить инфу. Попробуйте поэкспериментировать с sscanf
}
0
kirillyu
0 / 0 / 0
Регистрация: 14.06.2013
Сообщений: 10
14.06.2013, 22:08  [ТС] #13
быть может у кого то есть аналогичные работы? или хотя бы похожие части
0
Olga_
842 / 184 / 16
Регистрация: 01.08.2011
Сообщений: 502
14.06.2013, 22:09 #14
можно тогда сразу слова считывать

char s[1024];
while(fscanf(f, "%s", s) != EOF)

и записывать их в соответствующие поля. fgets тут излишний
0
kirillyu
0 / 0 / 0
Регистрация: 14.06.2013
Сообщений: 10
14.06.2013, 22:10  [ТС] #15
Цитата Сообщение от kventin_zhuk Посмотреть сообщение
kirillyu, догда считываете аля

C++
1
2
3
4
5
6
7
8
char str[255]
while (true)
{
    if (feof(fpout))
    break;
    fgets(str, sizeof(str), fpout); // считываем стрку из файла
    // а здесь нужно из строки str вычленить инфу. Попробуйте поэкспериментировать с sscanf
}
ок, спасибо. сейчас попробую что нибудь с этим

Добавлено через 1 минуту
бд организована так что там 4 поля и между каждым из них разграничитель ~
0
14.06.2013, 22:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.06.2013, 22:10
Привет! Вот еще темы с ответами:

Удаление символов из файла и запись в новый файл. - Turbo Pascal
Задание: Удалить все символы &quot;+&quot; и &quot;-&quot; в самой длинной строке файла. Остальные переписать без изменений. Помогите с ошибкой. program...

Списки. Инициализация, добавление элемента в начало и после другого элемента. Удаление элемента - C#
uses crt; type list= ^item; item=record data: integer; next:list; end; var l:list; procedure print;

Создать бинарный файл, внутри которого можно производить удаление и обновление инфомрации, а также добавление - C++
Добрый вечер! Подскажите, если кто-либо знает! Необходимо создать бинарный файл, внутри которого можно производить удаление и обновление...

Вывод из файла и запись в файл - C (СИ)
Имеется файл input.txt с двумя числами 2 3(отделены пробелом). Нужно сложить эти числа и вывести в файл output.txt. я что то не знаю как...


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

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

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