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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.05.2009, 18:48   #41
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Код:
 node *rsp;
  rsp = (*nsp).sled;
Только вот выводить вы почему-то начинаете с nsp->sled. А вот в nsp->str как раз и сидит мусор.

И вообще, почему (*nsp)? Вы же принимаете указатель, а не указатель на указатель.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]

Последний раз редактировалось Sazary; 30.05.2009 в 18:51.
Sazary вне форума Ответить с цитированием
Старый 30.05.2009, 19:08   #42
Nitrino
Я ещё только учусь
Форумчанин
 
Регистрация: 06.05.2009
Сообщений: 158
По умолчанию

Так в этом случаи это указатель на элемент структуры
Код:
(*nsp).sled
Эквивалентно
Код:
nsp->sled
А в чём тогда ошибка при считывании что то я немогу найти
функцию просмотра файла исправил
Код:
out_file (node *nsp)
//Вывод содержимого двунаправленного списка.
{
  int i;
  node *rsp;
  rsp =nsp;
  textbackground( TEXT_BG ); textcolor( TEXT_C );
  clrscr();
  while  (rsp!=NULL)
  {
   cprintf("\r %s", rsp->str); rsp = rsp->sled;
  }
  getch();
  clrscr();
  textbackground( TEXT_BG ); textcolor( TEXT_C );
   clrscr(); gotoxy( COL, ROW-1 );
   i=1; while( i <= N ) { out_menu( i, TEXT_BG ); i++; }
}
Она выводит вся правильно теперь с первого элемента
Nitrino вне форума Ответить с цитированием
Старый 30.05.2009, 19:17   #43
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Так в этом случаи это указатель на элемент структуры
Да, пардон. Просто привык оператором '->' пользоваться )

Но в функцию все-равно что-то не то приходит. Если добавить в начало:
Код:
node *tmp = nsp;
  cprintf("----\r\n");
  while(tmp)
   {
    cprintf("%s\n\r",tmp->str);
    tmp = tmp->sled;
   }
  cprintf("------\n\r");
  getch();
то видно, что первая строка - мусор.

Добавлено:
Посмотрел - уже в функции new_str в первой строке не то.
Еще добавлено:
Уже в функции открытия файла в первой строке какая-то муть.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]

Последний раз редактировалось Sazary; 30.05.2009 в 19:24.
Sazary вне форума Ответить с цитированием
Старый 30.05.2009, 19:37   #44
Nitrino
Я ещё только учусь
Форумчанин
 
Регистрация: 06.05.2009
Сообщений: 158
По умолчанию

Так в неё же потом должна копироваться первая считанная строка из файла
Nitrino вне форума Ответить с цитированием
Старый 30.05.2009, 19:40   #45
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Вот переделанная функция открытия файла. Теперь мусора нет.
Код:
void open_file (node **nsp, node **ksp)
// Построение двунаправленного списка:
// *nsp - указатель на начало списка.
// *ksp - указатель на конец списка.
// Элемент списка содержит строку.
{
  node *rsp;
  int i;
  char strok[1000];
  char *p;
  FILE *fp;
  fp = fopen("1.txt", "rt");
  *nsp = new (node);
  rsp = *nsp;
  (*nsp)->pred = (*nsp)->sled = NULL;
  fseek(fp,0,SEEK_SET);
  p=fgets(strok,1000,fp);
  while (p)
  {
    strcpy(rsp->str,strok);
    rsp->sled = new(node);
  (*(rsp->sled)).pred = rsp;
    rsp = rsp->sled;
    rsp->sled = NULL;
    p=fgets(strok,1000,fp);
  }
  *ksp = rsp->pred;
  rsp = rsp->pred;
  fclose(fp);
  delete rsp->sled;
  rsp->sled = NULL;

}
Осталось решить проблемой с удалением двух символов.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 30.05.2009, 19:46   #46
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Усе, нашел.
Код:
//Вставка строки в начало файла
node* insert_first(node *nsp)
{
  clrscr();
  int i,k;
  node *rsp;
  char strok[1000];
  FILE *fp;
  textbackground( TEXT_BG ); textcolor( TEXT_C );
  clrscr();
  cprintf("Введите строку:\n\r");
  gets(strok);

  rsp=(node*) malloc (sizeof(node));

  strcpy(rsp->str, strok);
  strcat(rsp->str, "\n\r\0");   // <<--вот тут надо так

  rsp->sled = nsp;
  nsp = rsp;


  fp = fopen("1.txt", "wt");
  fseek(fp,0,SEEK_SET);
  while  (rsp!=NULL)
  {
   fputs(rsp->str, fp); rsp = rsp->sled;
  }
  fclose(fp);
 /* fp = fopen("1.txt", "r+t");
  k=strlen(strok);
  fseek(fp,k,SEEK_SET);
  fprintf(fp ,"\n");
  fclose(fp);  */         // а этот кусок не нужен
  clrscr();
  textbackground( TEXT_BG ); textcolor( TEXT_C );
   clrscr(); gotoxy( COL, ROW-1 );
   i=1; while( i <= K ) { out_menu2( i, TEXT_BG ); i++; }
  return nsp;
}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 30.05.2009, 20:02   #47
Nitrino
Я ещё только учусь
Форумчанин
 
Регистрация: 06.05.2009
Сообщений: 158
По умолчанию

Спасибо огромно
Nitrino вне форума Ответить с цитированием
Старый 30.05.2009, 21:18   #48
Nitrino
Я ещё только учусь
Форумчанин
 
Регистрация: 06.05.2009
Сообщений: 158
По умолчанию

и снова я, вот написал функцию вставки строки перед указанной(по номеру)
Код:
node* insert_num(node *nsp)
{
 FILE *fp;
 int n,i;
 char strok[1000];
 node *rsp, *res;
 textbackground( TEXT_BG ); textcolor( TEXT_C );
 clrscr();
 cprintf("\rВведите номер строки: ");
 scanf("%d", &n);
 if(n==1){nsp=insert_first(nsp);}
 else
   {
    cprintf("Введите строку: \n\r");
    gets(strok);
    for(res=nsp; n!=0; n--, res=res->sled);
    rsp = new (node);
    strcpy(rsp->str, strok);
    rsp->sled=(*(rsp->pred)).sled;
    rsp->pred=res->pred;
    (*(res->pred)).sled=rsp;
    res->pred=rsp;
    fp = fopen("1.txt", "w+t");
  fseek(fp,0,SEEK_SET);
  while  (rsp!=NULL)
  {
   fputs(rsp->str, fp); rsp = rsp->sled;
  }
  fclose(fp);
    clrscr();
  textbackground( TEXT_BG ); textcolor( TEXT_C );
   clrscr(); gotoxy( COL, ROW-1 );
   i=1; while( i <= K ) { out_menu2( i, TEXT_BG ); i++; }

   }
 return(nsp);
}
но после того как вводишь номер строки выкидывает обратно,
Nitrino вне форума Ответить с цитированием
Старый 30.05.2009, 21:34   #49
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Исправьте вот так:
Код:
node* insert_num(node *nsp)
{
 FILE *fp;
 int n,i;
 char strok[1000];
 node *rsp, *res;
 textbackground( TEXT_BG ); textcolor( TEXT_C );
 clrscr();

 cprintf("\rВведите номер строки: ");
 scanf("%d", &n);
 flushall();

 if(n==1){nsp=insert_first(nsp);}
 else
   {
    cprintf("Введите строку: \n\r");
    gets(strok);
    for(res=nsp; n!=0; n--, res=res->sled);
    rsp = new (node);

    strcpy(rsp->str, strok);
    strcat(rsp->str,"\n");

    rsp->sled=res;
    rsp->pred=res->pred;
    res->pred->sled=rsp;
    res->pred=rsp;


  fp = fopen("1.txt", "w+t");
  fseek(fp,0,SEEK_SET);
  rsp = nsp;
  while  (rsp!=NULL)
  {
   fputs(rsp->str, fp); rsp = rsp->sled;
  }
  fclose(fp);
    clrscr();
  textbackground( TEXT_BG ); textcolor( TEXT_C );
   clrscr(); gotoxy( COL, ROW-1 );
   i=1; while( i <= K ) { out_menu2( i, TEXT_BG ); i++; }

   }
 return(nsp);
}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 30.05.2009, 21:45   #50
Nitrino
Я ещё только учусь
Форумчанин
 
Регистрация: 06.05.2009
Сообщений: 158
По умолчанию

а что это за функция такая flushall();, что она делает?
Nitrino вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Десятичные дроби в двоичном виде Ukrajinec Помощь студентам 2 13.04.2009 11:29
хранение данных в файле (dc++) AsabeasT Общие вопросы Delphi 2 27.03.2009 11:57
Поиск определённого текста в текстовом файле vitawt Общие вопросы Delphi 4 20.01.2008 22:12
Как правильно сохранить настройки текста в ini файле KORN Общие вопросы Delphi 2 30.10.2007 09:14
Поиск и замена текста в файле VAbramyak Общие вопросы Delphi 3 04.04.2007 20:20