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

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

Войти
Регистрация
Восстановить пароль
 
29AHexNumber
0 / 0 / 0
Регистрация: 06.12.2009
Сообщений: 15
#1

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

13.05.2010, 07:57. Просмотров 1001. Ответов 6
Метки нет (Все метки)

Вообщем вот такое задание: Строки читаются из текстового файла функцией 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 и указатели на них помещаются в структуру данных... (C++):

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

Чтение данных из текстового файла в структуру - C++
Добры вечер новичках и профессионалам! Изучаю C++ только четыре месяца и сейчас разбираюсь с записью из файла (библиотека fstream). И...

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

Из текстового файла заполнить структуру с сортировкой данных. Как? - C++ Builder
Добрый день всем! Подскажите, пожалуйста как данные, принятые с СОМ порта и записанные в текстовый файл занести в структуру или базу...

Используя один просмотр текстового файла, вывести его строки в порядке увеличения содержания в них цифр - Pascal
тема: Указатели. Используя один просмотр текстового файла, вывести его строки в порядке увеличения содержания в них цифр. (строки без...

Не понятно с функцией fgets() - PHP
Учусь работать с файлами. Надо вытянуть из файла определенную информацию (Она находится на разных строках). Функции fgets() сначала задал...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
29AHexNumber
0 / 0 / 0
Регистрация: 06.12.2009
Сообщений: 15
14.05.2010, 18:16  [ТС] #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
26 / 26 / 1
Регистрация: 14.05.2010
Сообщений: 57
14.05.2010, 18:54 #3
Элементы списка и сами строки должны создаваться в динамической памяти в процессе чтения файла.
А где вы выделяете память под массив структур?
29AHexNumber
0 / 0 / 0
Регистрация: 06.12.2009
Сообщений: 15
14.05.2010, 18:58  [ТС] #4
Мне не нужен массив структур. Мне просто надо чтобы строка читалась и сразу добавлялась в список
Reiji Cross
26 / 26 / 1
Регистрация: 14.05.2010
Сообщений: 57
14.05.2010, 19:04 #5
Цитата Сообщение от 29AHexNumber Посмотреть сообщение
Мне не нужен массив структур. Мне просто надо чтобы строка читалась и сразу добавлялась в список
Насколько я понимаю, задание подразумевает создание односвязного списка. А тут без выделения динамической памяти не обойтись...
29AHexNumber
0 / 0 / 0
Регистрация: 06.12.2009
Сообщений: 15
14.05.2010, 19:05  [ТС] #6
а можешь объяснить или написать как это сделать. а то я в списках вообще не шарю
Reiji Cross
26 / 26 / 1
Регистрация: 14.05.2010
Сообщений: 57
14.05.2010, 20:23 #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()
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.05.2010, 20:23
Привет! Вот еще темы с ответами:

из файла читаются строки и записываются в динамический массив - Delphi
Ребят, помогите пожалуйста. Срочно надо. Вобщем задача поставлена такая, из файла читаются строки и записываются в динамический массив....

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

Добавьте новый проект, по которому строки читаются из файла - C#
Добавьте новый проект, по которому строки читаются из файла, результат – слова в столбец – печатаются на экране

Создание на основе данных, получаемых из каждой строки текстового файла, соответствующего массива - AutoIt
Здравствуйте. Нужно создать N кол. массивов (в файле 76 строк) и записать числа которые находятся после второй запятой в строке в новый...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
14.05.2010, 20:23
Ответ Создать тему
Опции темы

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