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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.05.2017, 23:45   #1
Olaa
Пользователь
 
Регистрация: 28.11.2016
Сообщений: 18
Восклицание Проверить список на наличие клиентов, долг которых превышает некоторый минимум

Помогите найти ошибку.
Создать список, который содержит информацию о пользователях водопроводом (поля: фамилия, адрес, задолженность). Проверить список на наличие клиентов, долг которых превышает некоторый минимум. Вывести эти записи на экран и исключить из списка.

#include "stdafx.h"
#include "windows.h"
#include "iostream"
#include "string.h"
#include "stdlib.h"

typedef struct elem
{ char familia[20];
char adress[20];
int dolg;
struct elem * next;
} element;

typedef element * ptr;

ptr InsertV(ptr h, char * s, char * p, int dl);

void DrucSpisok(ptr h);

ptr DelElementV(ptr h);

ptr DelElementS(ptr h);

ptr DelSpisok(ptr h);

void DrucSpisokDel(ptr h);
int _tmain(int argc, _TCHAR* argv[])
{ setlocale (LC_ALL,"RUS");
int min;
element z;
ptr head, current;
head = NULL;
printf ("Введите min: ");
scanf("%d", &min);
printf ("Введите данные о клиентах в список. Последняя фамилия - #\n");
fflush(stdin);
printf ("Введите фамилию: ");
gets(z.familia);
printf ("Введите адрес: ");
gets(z.adress);
while (strcmp(z.familia, "#")!=0)
{ printf ("Введите долг: ");
scanf("%d", &(z.dolg));
head = InsertV(head, z.familia, z.adress, z.dolg);
fflush(stdin);
printf ("Введите фамилию: ");
gets(z.familia);
printf ("Введите адрес: ");
gets(z.adress);
}
printf ("Вывод созданного списка\n");
DrucSpisok(head);
printf ("Вывод списка клиентов долг которых превышает min\n");
head = DelSpisok(head);
if (head != NULL)
{ printf ("Список клиентов долг которых не превышает min\n");
DrucSpisokDel(head);
}
else
printf ("Клиентов долг которых не превышает min нет\n");
system("pause");
return 0;
}
//-------------------------------------------------------------------------------------------------------------------
ptr InsertV(ptr h, char * s, char * p, int dl)
{ ptr x;
x=(ptr) malloc(sizeof(element));
strcpy(x->familia, s);
strcpy(x->adress, s);
x->dolg=dl;
x->next = h;
h = x;
return h;
}
//-------------------------------------------------------------------------------------------------------------------
void DrucSpisok(ptr h)
{ ptr x;
x=h;
while (x != NULL)
{ printf ("%25s%25s%10d\n", x->familia, x->adress, x->dolg);
x = x->next;
}
}
//-------------------------------------------------------------------------------------------------------------------
ptr DelElementV(ptr h)
{ ptr x;
x = h;
h = h->next;
free(x);
return h;
}
//-------------------------------------------------------------------------------------------------------------------
ptr DelElementS(ptr h)
{ ptr x;
x = h->next;
h->next = h->next->next;
free(x);
return h;
}
//-------------------------------------------------------------------------------------------------------------------
ptr DelSpisok(ptr h)
{ ptr x;
int min;
while (h->dolg>min)
{
printf ("%25s%25s%10d\n", h->familia, h->adress, h->dolg);
h = DelElementV(h);
}
if (h != NULL)
{ x = h;
while (x->next != NULL)
if (x->next->dolg>min)
{
printf ("%25s%25s%10d\n", x->next->familia, x->next->adress, x->next->dolg);
x = DelElementS(x);
}
else
x = x->next;
}
return h;
}
//-------------------------------------------------------------------------------------------------------------------
void DrucSpisokDel(ptr h)
{
while (h != NULL)
{
printf ("%25s%25s%10d\n", h->familia, h->adress, h->dolg);
h = DelElementV(h);
}
}
Olaa вне форума Ответить с цитированием
Старый 27.05.2017, 00:04   #2
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

И что у тебя?
Проблема в чём?
ura_111 вне форума Ответить с цитированием
Старый 27.05.2017, 00:08   #3
Olaa
Пользователь
 
Регистрация: 28.11.2016
Сообщений: 18
По умолчанию

не выводит людей у которых превышает min, а если точнее, то начинается отладка

Последний раз редактировалось Olaa; 27.05.2017 в 00:10.
Olaa вне форума Ответить с цитированием
Старый 27.05.2017, 00:12   #4
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Скриншот покажи: что пишет, какая ошибка, в каком месте.
Ты умеешь делать скрины экрана?

И ещё вопрос: какой у тебя список?
Кольцевой, двунаправленный...
ura_111 вне форума Ответить с цитированием
Старый 27.05.2017, 00:28   #5
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Заснул, что ли?
ura_111 вне форума Ответить с цитированием
Старый 27.05.2017, 00:47   #6
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Тогда вопрос по-проще, а какие вообще бывают списки?
ura_111 вне форума Ответить с цитированием
Старый 27.05.2017, 11:28   #7
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Внимательно смотрим, где падает:

Код:
  printf ("Вывод созданного списка\n");
  DrucSpisok(head); 
  printf ("Вывод списка клиентов долг которых превышает min\n");
  head = DelSpisok(head);
Идём в функцию DrucSpisokDel:

Код:
void DrucSpisokDel(ptr h)
{ 
  while (h != NULL) 
  { 
    printf ("%25s%25s%10d\n", h->familia, h->adress, h->dolg);
    h = DelElementV(h); 
  }
}
А теперь смотрим DelSpisok:

Код:
ptr DelSpisok(ptr h)
{	
  ptr x; 
  int min;
  while (h->dolg>min)
  {
    printf ("%25s%25s%10d\n", h->familia, h->adress, h->dolg);
    h = DelElementV(h); 
  }
  if (h != NULL) 
  {	
    x = h; 
    while (x->next != NULL)
      if (x->next->dolg>min)
     { 
       printf ("%25s%25s%10d\n", x->next->familia, x->next->adress, x->next->dolg);
       x = DelElementS(x); 
     }
     else 
       x = x->next; 
  } 
  return h;
}
В общем, складывается впечатление, что Вы при первом выводе чистите сразу список (кстати, зачем?!), а потом из него же снова пытаетесь что-то вывести - то, чего там уже нет
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 27.05.2017, 12:37   #8
Olaa
Пользователь
 
Регистрация: 28.11.2016
Сообщений: 18
По умолчанию

не совсем понимаю как правильно
Olaa вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с++ . Вывести данные о пластинках, тираж которых превышает 10000 экземпляров. Cicadaa Помощь студентам 3 04.04.2017 13:02
создать линейный список и проверить наличие в данном списке заданного элемента Делька Помощь студентам 0 02.06.2015 21:19
Подсчитать количество слов, длина которых не превышает заданного числа n. Dikins Общие вопросы C/C++ 2 01.01.2015 22:11
Выбор строк,длина которых превышает заданную Dell2dimka Помощь студентам 12 26.01.2010 13:07