Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.10.2010, 00:46   #1
Last
В прострации
Форумчанин
 
Регистрация: 13.01.2009
Сообщений: 239
По умолчанию Создать список.

Здравствуйте, я в затруднительной ситуации. Имеется текстовый файл, необходимо считать его содержимое в буфер, а потом создать односвязный список: один элемент - одна буква из буфера. Для чтения из файла обязательно использовать функцию fread. Пишу в codeblocks. Вот что накрапал:
Код:
#include <stdlib.h>
#include <stdio.h>
typedef struct{
    char letter;
    struct List *next;
}List;

void CreateList(List * start, char buffer[], int size)
{
    int i = 0;
    List *q;
    q = start;
    for (i = 0; i < size; i++)
    {
        List *p = (List *)malloc(sizeof(List));
        q->next = p;
        q->letter =  buffer[i];
        p->next = NULL;
        q = p;
    }

}

void PrintList(List * s)
{
	while (s->next != NULL)
	{
		printf("%c", s->letter);
                      if (s->letter == "\0") printf("\n Here is it! \n"); /*(1)*/
		s = s->next;
	}
    printf( "\n" );
}

int main()
{
    FILE *fp;
    fp = fopen("t.txt","r");
    fseek(fp,0,SEEK_END);
    int size = ftell(fp);
    rewind(fp);
    char buffer[size];
    fread(buffer, sizeof(char), size, fp);
    int i = -1;
    printf("\n");
    printf("%d\n\n",size);
    List *start = (List *)malloc(sizeof(List));
    CreateList(start, buffer, size);
    PrintList(start);
    fclose(fp);
    return 0;
}
Собственно пока писал это сообщение отладил код и всё заработало, остался один вопрос. Если текстовый файл состоит из двух абзацев, на выходе я вижу также два абзаца, где же прячется символ переноса?
Проверка, например, как в строке /*(1)*/ не приносит результата.
Пол-жизни сидючи, в монитор глядючи...
Last вне форума Ответить с цитированием
Старый 25.10.2010, 10:35   #2
elja_1989
Пользователь
 
Регистрация: 16.03.2010
Сообщений: 58
По умолчанию

что-то я не понял, есть перенос или нет всётаки.. символы перевода строки \n, символ перевода коретки \r.. если тебе хочется их писать как симолы, тогда экранируй спец символы.

'\n' - служебный символ.. разбивай его на два '\\' и на 'n'
elja_1989 вне форума Ответить с цитированием
Старый 25.10.2010, 11:58   #3
Last
В прострации
Форумчанин
 
Регистрация: 13.01.2009
Сообщений: 239
По умолчанию

Разобрался, проверка
Код:
if (s->letter == '\n') printf("\n Here is it! \n");
работает.
Пол-жизни сидючи, в монитор глядючи...
Last вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
создать список DeDoK Общие вопросы Delphi 2 13.08.2010 01:32
создать автоматический список Nick_odessa Microsoft Office Excel 7 04.07.2010 12:47
Создать двусвязный список "POSTAL" Помощь студентам 1 21.04.2010 02:04
Как создать список? Интересующаяся26 Microsoft Office Excel 40 28.05.2009 17:46
Создать нумерованный список tsanidi Microsoft Office Excel 3 13.03.2009 11:03