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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.03.2017, 02:49   #41
CortesGames
Пользователь
 
Аватар для CortesGames
 
Регистрация: 23.10.2016
Сообщений: 86
По умолчанию

Вот, просто посмотри, это код программы который я скриншотил, это и есть твоя база только с моим интерфейсом, мой код просто не может повлиять на твой. Говорю же это чистейший твой код.
Код:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
struct node{
    char data;
    struct node *next;
}*head=NULL;
void insertData(char);
void displayData(void);
void removeData(void);

int n=0;
int main(void){
    int ch;
    char let;
    do{
        printf("\n1. Add element");
        printf("\n2. Display node");
        printf("\n3. Delete all 'p' before 'a'");
        printf("\n4. Exit");
        printf("\nYour choice: ");
        scanf("%d",&ch);
        switch(ch){
            case 1:
                    printf("Enter any letter: ");
                    scanf("%s",&let);
                    insertData(let);
                    break;
            case 2:
                    displayData();
                    break;
            case 3:
                    removeData();
                    break;
            case 4:
                    exit(0);
            default:
                    printf("Invalid Choice");
                    exit(0);
        }
        printf("------------------------------------------------------------------------\n");
    }while(1);
    return 1;
}

void insertData(char let){
    struct node *q,*temp;
    if(head==NULL){
        head=(struct node*)malloc(sizeof(struct node));
        head->data=let;
        head->next=head;
    }else{
        q=head;
        while(q->next!=head){
            q=q->next;
        }
        temp=(struct node*)malloc(sizeof(struct node));
        temp->data=let;
        temp->next=head;
        q->next=temp;
    }
    n++;
}

void displayData(void){
    struct node *q=head;
    printf("Nodes:\t");
    do{
        printf("|%c|\t",q->data);
        q=q->next;
    }while(q!=head);
    printf("\n");
}

void removeData(void){
    struct node *one = head;
	struct node *two = one->next;
	struct node *fre = two->next;
	head = one->next;
	int kol = n;
	bool flag = false;
	int vuvod = 0;
	while (vuvod < kol)
	{
		if (two->data == 'p' && fre->data == 'a')
		{
			one->next = fre;
			two = one->next;
			fre = two->next;
			n--;
			if (vuvod == 0)
				flag = true;
		}
		else
		{
			one = one->next;
			two = two->next;
			fre = fre->next;
		}
		vuvod++;
	}
	if (two->data == 'p' && fre->data == 'a' && flag == false)
	{
		one->next = fre;
		head = head;
	}
	else
		head = fre;
	///////////////////////////////////////////////////
	vuvod = 0;
	while (vuvod < n)
	{
		printf("%c ", head->data);
		head = head->next;
		vuvod++;
	}
	printf("%c ", head->data);
	printf("\n");
	printf("n=%d\n",n);
}
Насылаю баги по фотографии

преимущественно себе
CortesGames вне форума Ответить с цитированием
Старый 17.03.2017, 02:53   #42
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

нет, делай скриншоты на моём, потому что на своём я уверен, а в твоём нет.
ura_111 вне форума Ответить с цитированием
Старый 17.03.2017, 03:06   #43
CortesGames
Пользователь
 
Аватар для CortesGames
 
Регистрация: 23.10.2016
Сообщений: 86
По умолчанию

Не знаю почему ты так уверен, но уверен ты зря. Твой базис на котором ты так настаивал не может даже начальный список правильно вывести, не говоря уже о том что он не правильно обрабатывает.
Вот код:
Код:
#include <stdio.h>
#include <stdbool.h>
struct list
{
	char key;
	list* next;
};

int main()
{
	list *head = new list;	head->key = 'a';
	list *h1 = new list;	h1->key = 'p';  head->next = h1;
	list *h2 = new list;	h2->key = 'a';    h1->next = h2;
	list *h3 = new list;	h3->key = 'p';    h2->next = h3;
	list *h4 = new list;	h4->key = 'a';    h3->next = h4;
	list *h5 = new list;	h5->key = 'p';    h4->next = h5;
	list *h6 = new list;	h6->key = 'a';    h5->next = h6;
	h2->next = head;

	int vuvod;
	int n = 6; // êîëè÷åñòâî óçëîâ

	// Âûâîä íà ýêðàí ïåðâîíà÷àëüíîãî ìàññèâà
	vuvod = 0;
	while (vuvod < n)
	{
		printf("%c ", head->key);
		head = head->next;
		vuvod++;
	}
	printf("%c ", head->key);
	printf("\n");
	////////////////////Ñàìà ïðîãðàììà/////////////////////////////
	list *one = head;
	list *two = one->next;
	list *fre = two->next;
	head = one->next;
	int kol = n;
	bool flag = false;
	vuvod = 0;
	while (vuvod < kol)
	{
		if (two->key == 'p' && fre->key == 'a')
		{
			one->next = fre;
			two = one->next;
			fre = two->next;
			n--;
			if (vuvod == 0)
				flag = true;
		}
		else
		{
			one = one->next;
			two = two->next;
			fre = fre->next;
		}
		vuvod++;
	}
	if (two->key == 'p' && fre->key == 'a' && flag == false)
	{
		one->next = fre;
		head = head;
	}
	else
		head = fre;
	///////////////////////////////////////////////////
	vuvod = 0;
	while (head < head->next)
	{
		printf("%c ", head->key);
		head = head->next;
		vuvod++;
	}
	printf("%c ", head->key);
	printf("\n");

	int num;
	scanf("%d", &num); // ÷òîáû êîíñîëü áûñòðî íå çàêðûâàëàñü
	return 0;
}
Вот выход:
Насылаю баги по фотографии

преимущественно себе
CortesGames вне форума Ответить с цитированием
Старый 17.03.2017, 03:09   #44
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Что это такое?
Код:
h2->next = head;
Делай остальные скиншоты.
ura_111 вне форума Ответить с цитированием
Старый 17.03.2017, 03:32   #45
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

А это что?
Код:
while (head < head->next)
сопоставь этот момент - надо "как у тебя"
.

Последний раз редактировалось ura_111; 17.03.2017 в 03:42.
ura_111 вне форума Ответить с цитированием
Старый 18.03.2017, 14:03   #46
CortesGames
Пользователь
 
Аватар для CortesGames
 
Регистрация: 23.10.2016
Сообщений: 86
По умолчанию

Признаю, был не прав, учусь на своих ошибках. Вообщем, я понял что в моём коде ошибка в функции добавления элементов, но так и не понял в чём она заключалась. Твой код работает только если он полностю чистый и элементы там обявляются прямо в коде, меня такое не устраивает, мне нужно чтобы я с консоли вводил строку а оно разбивало эту строку по элементам. Я пытался сделать такой ввод в твоём коде вот так:
Код:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

struct list
{
	char key;
	list* next;
};

int main()
{
	bool empty=true,second;
	struct list *q,*temp;
	char ch;
	int n=0;
	while ( ( ch = getchar() ) !=  EOF){
		if(empty==true){
			struct list *head;
			head=(struct list*)malloc(sizeof(struct list));
			head->key = ch;
			head->next=head;
			empty=false;
			q=head;
		}else{
			temp=(struct list*)malloc(sizeof(struct list));
	        temp->key=ch;
	        temp->next=head;
	        q->next=temp;
	        q=temp;
		}
		n++;
	}
	int vuvod;

	vuvod = 0;
	while (vuvod < n)
	{
		printf("%c ", head->key);
		head = head->next;
		vuvod++;
	}
	printf("%c ", head->key);
	printf("\n");
	list *one = head;
	list *two = one->next;
	list *fre = two->next;
	head = one->next;
	int kol = n;
	bool flag = false;
	vuvod = 0;
	while (vuvod < kol)
	{
		if (two->key == 'p' && fre->key == 'a')
		{
			one->next = fre;
			two = one->next;
			fre = two->next;
			n--;
			if (vuvod == 0)
				flag = true;
		}
		else
		{
			one = one->next;
			two = two->next;
			fre = fre->next;
		}
		vuvod++;
	}
	if (two->key == 'p' && fre->key == 'a' && flag == false)
	{
		one->next = fre;
		head = head;
	}
	else
		head = fre;
	vuvod = 0;
	while (head < head->next)
	{
		printf("%c ", head->key);
		head = head->next;
		vuvod++;
	}
	printf("%c ", head->key);
	printf("\n");

	int num;
	scanf("%d", &num);
	return 0;
}
Но оно опять начинает творить фигню, такую как в моём коде:

Не могу найти в чём соль.
Также не могу понять зачем вот эта часть, ведь она по сути выводит лишний элемент:
Код:
        printf("%c ", head->key);
	printf("\n");
Насылаю баги по фотографии

преимущественно себе
CortesGames вне форума Ответить с цитированием
Старый 18.03.2017, 16:05   #47
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Вроде забацал этот момент (хорошенько протестируй):
Код:
#include <stdio.h>
#include <stdlib.h>

struct list
{
	char key;
	list* next;
};

list *head, *temp;
int n = -1;

int main()
{
	bool empty = true;	
	char ch;
	while ((ch = getchar()) != '\n')
	{
		list *var = (struct list*) malloc(sizeof(struct list));
		var->key = ch;
		if (empty == true)
		{
			empty = false;
			head = var;
			temp = var;
		}
		else
		{
			temp->next = var;
			temp = var;
		}
		n++;
	}
	temp->next = head;
	
	if (n != -1)
	{
		printf("\n");
		int vuvod;
		vuvod = 0;
		while (vuvod < n)
		{
			printf("%c", head->key);
			head = head->next;
			vuvod++;
		}
		printf("%c", head->key);
		printf("\n");
		list *one = head;
		list *two = one->next;
		list *fre = two->next;
		head = one->next;
		int kol = n;
		bool flag = false;
		vuvod = 0;
		while (vuvod < kol)
		{
			if (two->key == 'p' && fre->key == 'a')
			{
				one->next = fre;
				two = one->next;
				fre = two->next;
				n--;
				if (vuvod == 0)
					flag = true;
			}
			else
			{
				one = one->next;
				two = two->next;
				fre = fre->next;
			}
			vuvod++;
		}
		if (two->key == 'p' && fre->key == 'a' && flag == false)
		{
			one->next = fre;
			head = head;
		}
		else
			head = fre;
		vuvod = 0;
		while (vuvod < n)
		{
			printf("%c", head->key);
			head = head->next;
			vuvod++;
		}
		printf("%c", head->key);
		head = head->next;
		printf("\n");
	}

	scanf("%d", &n);
	return 0;
}

Последний раз редактировалось ura_111; 18.03.2017 в 16:09.
ura_111 вне форума Ответить с цитированием
Старый 18.03.2017, 16:15   #48
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Только я сомневаюсь:
Код:
list *var = (struct list*) malloc(sizeof(struct list));
или
list *var = (struct list*) malloc(1);
найди это место в программе и попробуй (протестируй) и так и так.
ura_111 вне форума Ответить с цитированием
Старый 18.03.2017, 19:21   #49
CortesGames
Пользователь
 
Аватар для CortesGames
 
Регистрация: 23.10.2016
Сообщений: 86
По умолчанию

Ну мы ведь выделяем память под структуру а не только под чар, в структуре ещё указатель есть, ему наверное тоже надо место под хранение. Мне кажется первый вариант правильный. Сейчас попробую.
Насылаю баги по фотографии

преимущественно себе
CortesGames вне форума Ответить с цитированием
Старый 18.03.2017, 19:26   #50
CortesGames
Пользователь
 
Аватар для CortesGames
 
Регистрация: 23.10.2016
Сообщений: 86
По умолчанию

Протестировал, работает и так, и так. Нашёл только один баг:
Насылаю баги по фотографии

преимущественно себе
CortesGames вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
c++ удаление элемента списка NinjaNoob Помощь студентам 1 28.01.2013 04:01
Сортировка однонаправленого списка вставками. gvilon Паскаль, Turbo Pascal, PascalABC.NET 0 08.11.2011 23:39
Удаление элемента из списка bpystep Помощь студентам 4 09.07.2010 14:55
Удаление элемента из списка Ghost_gg Паскаль, Turbo Pascal, PascalABC.NET 2 30.05.2010 20:43
Удаление последнего элемента из списка и реверс этого списка. Goose Общие вопросы C/C++ 8 16.05.2010 16:12