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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.03.2014, 19:27   #11
East Undia Trading
Форумчанин
 
Регистрация: 02.10.2013
Сообщений: 231
По умолчанию

BDA, все понял.Далее не работает функции вывода на экран.Пишет
Код:
printf("Список слева направо\n");
и прекращает работу без ошибки.
Код:
void show_list(void)
{
  struct city *info;
  info = head;
  while(info) 
  {
  	
    printf("%s", strlen(info->name_f));
    printf("%s", strlen(info->name_p));
    printf("%d", info->date);
    printf("%s", strlen(info->genre));
    printf("\n");
    info = info->next;
  }
}


PHP код:
case 3
                        {
                            
printf("Список слева направо\n");
                            
show_list();
                            break;
                        } 
Я думаю у меня с next что-то не так.

Последний раз редактировалось East Undia Trading; 31.03.2014 в 19:32.
East Undia Trading вне форума Ответить с цитированием
Старый 31.03.2014, 19:32   #12
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,303
По умолчанию

Код:
printf("%s %s %s %s\n", info->name_f, info->name_p, info->date, info->genre);
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 31.03.2014, 20:12   #13
East Undia Trading
Форумчанин
 
Регистрация: 02.10.2013
Сообщений: 231
По умолчанию

BDA, можно еще вопрос по процедуре удаления?Ввожу цифру два, но вместо удаления выводятся первые строки меню.
Код:
void delete_unit()
{						newList=head;
						if(newList != NULL) //åñëè ñïèñîê íå ïóñòîé
						{
							head=head->next;
							free(newList); //óäàëåíèå ýëåìåíòà
							if (head!=NULL) //ýëåìåíò íå åäèíñòâåííûé
							   head->previous=NULL;
							else //óäàëèëè åäèíñòâåííûé, ñïèñîê ñòàë ïóñòûì
							   last = NULL;
						}
}

Код:
 case 2: 
                        {	
                        	int n = count_L();
                        	if(n == 0)
                        	{
                        		printf("Невозможноу удалить элементы в стеке 0 элементов");
                        	}
                        	else if (n == 1)
							{
								printf("Невозможноу удалить элементы в стеке 1 элемент");
                        	}
                        	else if (n > 2)
                        	{
								delete_unit();
                           		delete_unit();
                        	}
                            break;
                        }
East Undia Trading вне форума Ответить с цитированием
Старый 31.03.2014, 20:47   #14
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,303
По умолчанию

Функция удаления просто удаляет структуру из списка, но ничего не выводит. Логично, что после срабатывания удаления будет выведено меню.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 31.03.2014, 21:37   #15
East Undia Trading
Форумчанин
 
Регистрация: 02.10.2013
Сообщений: 231
По умолчанию

BDA, понял-понял.Я память забил, прога зависла, я не то смотрел.
East Undia Trading вне форума Ответить с цитированием
Старый 04.04.2014, 00:49   #16
East Undia Trading
Форумчанин
 
Регистрация: 02.10.2013
Сообщений: 231
По умолчанию

Код:
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <string.h>
struct Queue
{
	int data[4]; //ìàññèâ äàííûõ
	int last; //óêàçàòåëü íà íà÷àëî
};
void Creation(Queue *Q) //ñîçäàíèå î÷åðåäè
{
	Q->last = 0;
}

void Add(Queue *Q) //äîáàâëåíèå ýëåìåíòà
{
	if (Q->last == N)
	{
		printf("\nÎ÷åðåäü çàïîëíåíà\n\n"); return;
	}
	int value;
	printf( "\nçíà÷åíèå > "); scanf("%d", value);
	Q->data[Q->last++] = value;
	printf("\nÝëåìåíò äîáàâëåí â î÷åðåäü\n");
}
Почему не определяет тип Queue?
East Undia Trading вне форума Ответить с цитированием
Старый 04.04.2014, 01:08   #17
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,303
По умолчанию

Код:
typedef struct Queue
{
    int data[4];
    int last;
} Queue;

void Creation(Queue *Q)
или
Код:
struct Queue
{
    int data[4];
    int last;
};

void Creation(struct Queue *Q)
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 04.04.2014, 01:09   #18
niwssg
Пользователь
 
Регистрация: 12.11.2012
Сообщений: 35
По умолчанию

Нужно создать структуру что то вроде
Код:
struct Queue something;
Потом уже передавать указатель на структуру something
Код:
void Add(struct Queue *q)
Если я правильно понимаю.
niwssg вне форума Ответить с цитированием
Старый 04.04.2014, 18:14   #19
East Undia Trading
Форумчанин
 
Регистрация: 02.10.2013
Сообщений: 231
По умолчанию

Еще такой вопрос, есть хороший, разобранный пример структуры данных - очередь.Я вот такой нашел на С++, переписал его на си, но функции не работают.После ввода единицы программа прекращает работу без ошибки.Предыдущую программу я так же переписывал и были те же проблемы, в интернете есть сайт в котором много разобранных примеров?
Код:
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <string.h>
#include <stdbool.h>
const int N = 4;
typedef struct Queue
{
	int data[4]; //массив данных
	int last; //указатель на начало
} Queue;
void Creation(Queue *Q) //создание очереди
{
	Q->last = 0;
}

bool Full(Queue *Q) 
{
	if (Q->last == 0) return true;
	else return false;
}

void Add(Queue *Q) //добавление элемента
{
	if (Q->last == N)
	{
		printf("\nОчередь заполнена\n\n"); return;
	}
	int value;
	printf( "\nзначение > "); scanf("%d", value);
	Q->data[Q->last++] = value;
	printf("\nЭлемент добавлен в очередь\n");
}
void Delete(Queue *Q) //Удаление элемента
{
	int i;
	for (i = 0; i<Q->last && i<N; i++) //Смещение элементов
		Q->data[i] = Q->data[i + 1]; Q->last--;
}
int Top(Queue *Q) //Вывод начального элемента
{
	return Q->data[0];
}
int Size(Queue *Q) //Размер очереди
{
	return Q->last;
}
void main() //Главная функция
{
	setlocale(LC_ALL, "Rus");
	Queue Q;
	Creation(&Q);;
	char number;
	do
	{
		printf( "1. Добавить элемент\n" );
		printf( "2. Удалить элемент" );
		printf( "3. Вывести верхний элемент\n" );
		printf( "4. Узнать размер очереди\n" );
		printf( "0. Выйти\n\n");
		printf( "Номер команды > "); scanf("%s", number);
		switch (number)
		{
		case 1: Add(&Q);
			break;
			//-----------------------------------------------
		case 2:
			if (Full(&Q)) printf("\nОчередь пуста\n\n");
			else
			{
				Delete(&Q);
				printf( "Элемент удален из очереди\n\n");
			} break;
			//-----------------------------------------------
		case 3:
			if (Full(&Q)) printf( "Очередь пуста\n\n");
			else printf( "\nНачальный элемент: \n\n");
			Top(&Q);
			break;
			//-----------------------------------------------
		case 4:
			if (Full(&Q)) printf("Очередь пуста\n\n");
			else printf("\nНачальный элемент:\n\n");
			Size(&Q);
			break;
			//-----------------------------------------------
		case 0: break;
		default: printf("Команда не определена\n\n");
			break;
		}
	} while (number != '0');
	system("pause");
}
East Undia Trading вне форума Ответить с цитированием
Старый 04.04.2014, 19:05   #20
niwssg
Пользователь
 
Регистрация: 12.11.2012
Сообщений: 35
По умолчанию

В main у вас:
Код:
char number;
	 scanf("%s", number);
		switch (number)
		{
		case 1: Add(&Q);
			break;
Как то так:
Код:
char number;
	   scanf("%c", number);
		switch (number)
		{
		case '1': Add(&Q);
			break;
niwssg вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка в коде программы (для индекса требуется массив или указатель). Язык Си Семижон Евгения Помощь студентам 7 20.01.2014 02:45
Ошибка в коде программы.Язык Си. East Undia Trading Помощь студентам 8 19.01.2014 21:03
Ошибка в ходе программы, требуется пояснение... kotzzz Мультимедиа в Delphi 2 14.04.2010 14:31
Язык программы KWN, lnc Общие вопросы Delphi 1 22.01.2010 22:33
как в цикле создавать массив с одним и тем же именем!?ошибка в ходе выполнения -access violation at addr sleevman Помощь студентам 2 28.10.2009 19:06