Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Выводится пустая строка после добавления данных


Автор: nikramunger 31.10.2013, 11:21
Используя функцию add,добавляю данные,и после нее появляется пустая "строка" , когда использую функцию list
Код
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
struct spis
{char data[20];
  struct spis *v1; 
  struct spis *v2; 
  
};
void create(void); //создание списка
void list(spis *); //просмотр списка
void del(void); //отсеивание ненужных данных
void add(void);  //добавление списка
struct spis *head,*tail; 
main()
{
      int nom;
while(1)
{
        
  printf("\n 0.Заполнение списка с начала \n");      
  printf(" 1. Вывод списка с начала \n");
  printf(" 2. Вывод списка с конца  \n");
  printf(" 3. Удаление строки \n");
  printf(" 4. Дополнить список\n");
  printf(" 5. Выход \n");
  scanf("%d",&nom);
  switch(nom)
  {
    case 0: 
    create();  break;       
  case 1:
   list(head);break;
  case 2:
      list(tail); break;
  case 3:
       del();break;
  case 4:
       add();break;
  case 5:return 0;
  default:printf("Неверный режимм");
  }
}
getch();
}
void create(void)
{spis *p,*pred;
  pred=NULL;
  do { p=(spis *)malloc(sizeof(spis));
    printf(":Данные "); gets(p->data);
      p->v1=pred;
    if (pred != NULL)
      pred->v2=p;
    else
      head=p;
    pred=p;
    puts(" Закончить - <esc>");
}
while (getch()!=27);
  tail=p;
  tail->v2=NULL;
}
void add(void) 
{
do{            spis *p,*pn; 
            //clrscr();
            pn=(spis *)malloc(sizeof(spis)); /
            printf("Введите данные: ");
            gets(pn->data);            
            p=tail; 
            pn->v1=tail; 
            pn->v2=NULL;
            p->v2=pn;
            tail=pn; 
            puts(" Закончить - <esc>");
}while(getch()!=27);
}
 
 
void list(spis *p)
{if (p==head)
  while (p != NULL)
    {puts(p->data);
      p=p->v2;
    }
   else if (p==tail)
  while ( p!= NULL)
  {
        printf("\n%s",p->data);
    p=p->v1;
  }
  else
    puts("Неверный адрес ");
    getch();
  }
void del(void)
{spis *p,*temp;char f[20]; 
 
char *ach;
 
  p=head;
  while (p!=NULL)
  
    {ach=strrchr(p->data,'2');
  
  puts(ach);
        if (ach!=NULL) 
    {
  
        
            if (p==head) 
        {head=p->v2;
          head->v1=NULL;
          free(p);
          p=head;
        }
       else if (p==tail) 
      {tail=p->v1;
        tail->v2=NULL;
        free(p);
        p=tail;
      }
      else 
      {p->v2->v1=p->v1;
        p->v1->v2=p->v2;
        temp=p;
        p=p->v2;
        free(temp);
      }
    }
else 
p=p->v2;
}
getch();
}


Модератор: не забываем пользоваться кнопочкой "Код"

Автор: borisbn 2.11.2013, 16:29
1. А что... это компилируется ?
Цитата(nikramunger @  31.10.2013,  11:21 Найти цитируемый пост)
pn=(spis *)malloc(sizeof(spis)); /

2. Вот здесь ты и выводишь пустую строку
Цитата(nikramunger @  31.10.2013,  11:21 Найти цитируемый пост)
 printf("\n%s",p->data);

Вот твоя программа - http://ideone.com/9SUQMW - всё работает

Добавлено через 2 минуты и 45 секунд
И ещё. Отформатируй код по человечески... Сам же запутаешься. И назови переменные повнятнее, а не 
Цитата(nikramunger @  31.10.2013,  11:21 Найти цитируемый пост)
p->v1

Цитата(nikramunger @  31.10.2013,  11:21 Найти цитируемый пост)
p=p->v2

Самому же понятней будет.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)