Форум программистов, компьютерный форум CyberForum.ru

Строки читаются из текстового файла функцией fgets и указатели на них помещаются в структуру данных... - C++

Восстановить пароль Регистрация
 
29AHexNumber
0 / 0 / 0
Регистрация: 06.12.2009
Сообщений: 15
13.05.2010, 07:57     Строки читаются из текстового файла функцией fgets и указатели на них помещаются в структуру данных... #1
Вообщем вот такое задание: Строки читаются из текстового файла функцией fgets и указатели на них помещаются в структуру данных. Элементы списка и сами строки должны создаваться в динамической памяти в процессе чтения файла. В исходном состоянии структура данных - пуста.

я написал следующее:

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
struct list
{
    int num;
    char val;
    list *next;
};
void LOADandFILL()
{
    FILE *f;
    char name[256],strc[256];
    int lines=0,c;
    list *p=new list;
    p=ph;
    scanf("%s",&name);
    f=fopen(name,"r");
    if(f==NULL)
    {
        printf("Error\n");
        return;
    }
    while((c=getc(f))!=EOF)
        if(c==10)
            lines++;
    rewind(f);
    char** str=new char*[lines];
    for(int i=0;i<lines;p=p->next,i++)
    {
        fgets(strc,255,f);
        str[i]=strdup(strc);
        strcpy(p->val,strc);
    }
    
}
void main()
{
    LOADandFILL();
}
компилятор не находит ошибок, но программа сыпется в последнем цикле либо на строчке strcpy(p->val,strc);, если я закоментиваю эту строчку, то программа сыпется на строке p=p->next.

Добавлено через 15 часов 37 минут
Ну неужели никто не знает?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.05.2010, 07:57     Строки читаются из текстового файла функцией fgets и указатели на них помещаются в структуру данных...
Посмотрите здесь:

Функция fgets и перевод строки C++
[c++][fgets] чтение файла построчно ? C++
Считывание данных из файла в структуру C++
C++ Вывод строки из текстового файла
Ввод данных в структуру из файла C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
29AHexNumber
0 / 0 / 0
Регистрация: 06.12.2009
Сообщений: 15
14.05.2010, 18:16  [ТС]     Строки читаются из текстового файла функцией fgets и указатели на них помещаются в структуру данных... #2
Я кое-что упустил вообще вот задание целиком: Элемент односвязного списка содержит массив указателей на строки. Строки читаются из текстового файла функцией fgets и указатели на них помещаются в структуру данных. Элементы списка и сами строки должны создаваться в динамической памяти в процессе чтения файла. В исходном состоянии структура данных - пуста.

Добавлено через 12 минут
я вообщем изменил код получилось следующее:
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
#include <stdio.h>
#include <string.h>
struct list
{
    char** str;
    list *next;
};
void LOADandFILL()
{
    FILE *f;
    char name[256],strc[256];
    list *p=NULL;
    scanf("%s",&name);
    f=fopen(name,"r");
    if(f==NULL)
    {
        printf("Error\n");
        return;
    }
    for(int i=0;!feof(f);p=p->next,i++)
    {
        fgets(strc,255,f);
        p->str[i]=strdup(strc);
    }
    
}
void main()
{
    LOADandFILL();
}
ошибки происходят там же. поэтому я где то накосячил в структуре
Reiji Cross
 Аватар для Reiji Cross
26 / 26 / 1
Регистрация: 14.05.2010
Сообщений: 57
14.05.2010, 18:54     Строки читаются из текстового файла функцией fgets и указатели на них помещаются в структуру данных... #3
Элементы списка и сами строки должны создаваться в динамической памяти в процессе чтения файла.
А где вы выделяете память под массив структур?
29AHexNumber
0 / 0 / 0
Регистрация: 06.12.2009
Сообщений: 15
14.05.2010, 18:58  [ТС]     Строки читаются из текстового файла функцией fgets и указатели на них помещаются в структуру данных... #4
Мне не нужен массив структур. Мне просто надо чтобы строка читалась и сразу добавлялась в список
Reiji Cross
 Аватар для Reiji Cross
26 / 26 / 1
Регистрация: 14.05.2010
Сообщений: 57
14.05.2010, 19:04     Строки читаются из текстового файла функцией fgets и указатели на них помещаются в структуру данных... #5
Цитата Сообщение от 29AHexNumber Посмотреть сообщение
Мне не нужен массив структур. Мне просто надо чтобы строка читалась и сразу добавлялась в список
Насколько я понимаю, задание подразумевает создание односвязного списка. А тут без выделения динамической памяти не обойтись...
29AHexNumber
0 / 0 / 0
Регистрация: 06.12.2009
Сообщений: 15
14.05.2010, 19:05  [ТС]     Строки читаются из текстового файла функцией fgets и указатели на них помещаются в структуру данных... #6
а можешь объяснить или написать как это сделать. а то я в списках вообще не шарю
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.05.2010, 20:23     Строки читаются из текстового файла функцией fgets и указатели на них помещаются в структуру данных...
Еще ссылки по теме:

Запись в структуру из файла. База данных C++
C++ Функцией перевода текстового файла в бинарный
Считывание данных из текстового файла в структуру C++

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

Или воспользуйтесь поиском по форуму:
Reiji Cross
 Аватар для Reiji Cross
26 / 26 / 1
Регистрация: 14.05.2010
Сообщений: 57
14.05.2010, 20:23     Строки читаются из текстового файла функцией fgets и указатели на них помещаются в структуру данных... #7
Вот немного видоизменил и дополнил вашу программу. Должно работать

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
typedef struct _list
{
    char val[256];
    struct _list *next;
} list;
 
list *head = NULL, *tail = NULL;
 
int Add(char *val)
{
    list *tmp = (list*)malloc(sizeof(list));
if(!tmp) 
{
    printf("Error\n");
    return 0;
}
    tmp->next = NULL;
    strcpy(tmp->val, val);
    if(tail) tail->next = tmp;
    tail = tmp;
    if(!head) head = tail;
    return 1;
}
 
void Destroy(void)
{
    while(head)
    {
        tail = head;
        head = head->next;
        free(tail);
    }
        head = tail = NULL;
}
 
void LOADandFILL()
{
 
    FILE *f;
    char name[256],strc[256];
    int lines=0,c;
    list *p=new list;
    p=NULL;
    scanf("%s",&name);
    f=fopen(name,"r");
    if(f==NULL)
    {
        printf("Error\n");
    }
        while((c=getc(f))!=EOF)
                if(c==10)
                        lines++;
        rewind(f);
        char** str=new char*[lines];
        for(int i=0;i<=lines;i++)
        {
                fgets(strc,255,f);
                Add(strc);
        }
        
}
 
 
int _tmain(int argc, _TCHAR* argv[])
{
        LOADandFILL();
        Destroy();
        return 0;
}
Добавлено через 22 минуты
замените предварительно

C++
1
int _tmain(int argc, _TCHAR* argv[])
на
C++
1
int main()
Yandex
Объявления
14.05.2010, 20:23     Строки читаются из текстового файла функцией fgets и указатели на них помещаются в структуру данных...
Ответ Создать тему
Опции темы

Текущее время: 13:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru