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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.05.2010, 04:37   #1
kwns
 
Регистрация: 13.05.2010
Сообщений: 7
По умолчанию Вывод на экран двух первых отрицательных элементов стека

Необходимо вывести на экран 2 первых отрицательных числа очереди стека. При выполнении задания идет бесконечный цикл.
Если не трудно помогите разобраться. Заранее благодарен


Код:
#include <stdio.h>
#include <conio.h> 
#include <process.h>
#include <iostream.h>
#include <windows.h>

char* Rus(const char* text);
char bufRus[255];

struct STACK
{
	int info;
	STACK *Next;
};

STACK *head=NULL;
void push(STACK **);	//Формирование стека
void pop(STACK *);	//Вывод содержимого стека
void func(STACK *);	//Выполнение задания (вывод на экран двух первых отрицательных чисел очереди)

void main (void)
{
	int n, i;

	while (1)
	{
		printf(Rus("\nФормирование стека - 1\n")); 	
		printf(Rus("\nПросмотр - 2\n")); 
		printf(Rus("\nВыполнение задания - 3\n")); 
		printf(Rus("\nВыход - 0\n")); 
		fflush(stdin);
		switch(n=getchar())
		{
			case '1': 
				system("cls"); //Формирование стека
				printf(Rus("\n Введи количество элементов в стеке\n"));
				scanf("%d", &n);
				for(i=1; i<=n; i++) 
				push(&head);
				system("pause");
				system("cls"); 
				break;

			case '2'://Вывод содержимого стека
				system("cls"); 
				//Просмотр непустого стека
				pop(head);
				system("pause");
				system("cls"); 
				break;

			case '3':
				//Выполнение задания (вывод на экран двух первых отрицательных чисел очереди)
				system("cls"); 
				//Просмотр непустого стека
				func(head);
				system("pause");
				system("cls");
				break;

			case '0': exit(0);

			default:	
				printf(Rus("\nНет вида работы %c\n"),n); 
				break;

		}
	}
}

char* Rus(const char* text)
{
	CharToOem(text,bufRus);
	return bufRus;
}
//Формирование стека
void push(STACK **head)
{
//head - вершина стека
//t - текущий элемент
//Захват памяти под первый элемент
STACK* t=new STACK;
printf(Rus("\nВводи элемент стека\n\n"));
scanf("%d", &t->info);
t->Next=(*head); //Новый элемент указывает на головной
(*head)=t;//Новый элемент становится гооловным
}

void pop(STACK *h)
{
	system("cls");
	printf("\n\n");
	puts(Rus("\n***Содержимая информация***\n"));
	if(!h)
	{
		printf(Rus("\nСписок пуст\n\n"));
		exit(0);}
		do
		{
			printf(Rus("Текущее значение стека =%d и находится по ардресу %p\n"),h->info,h);
			h=h->Next; //вывод элемента и смещение по стеку
		}
		while(h);    //пока не достигнут конец стека
	}


void func(STACK *h)
{
	system("cls");
	printf("\n\n");
	if(!h)
	{
		printf(Rus("\nСписок пуст\n\n"));
		exit(0);
	}
	do
	{
		if ((h->info)<0) 
		{	for (int i=0; i<2; i++);
			{
				printf(Rus("Отрицательное значение очереди стека =%d и находится по ардресу %p\n"),h->info,h);
			}
		}
		else
		h=h->Next;

		
	}
	while(h);
}

Последний раз редактировалось kwns; 26.05.2010 в 04:48.
kwns вне форума Ответить с цитированием
Старый 26.05.2010, 08:01   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Цитата:
Сообщение от kwns Посмотреть сообщение
Код:
do
	{
		if ((h->info)<0) 
		{	for (int i=0; i<2; i++);
			{
				printf(Rus("Отрицательное значение очереди стека =%d и находится по ардресу %p\n"),h->info,h);
			}
		}
		else
		h=h->Next;
	}
	while(h);
for (int i=0; i<2; i++); - это пустой цикл, он вообще не нужен. А вот h=h->Next; выполнится лишь при условии, что число неотрицательное, вот поэтому при первом же отрицательном и происходит зацикливание
Пример.
Код:
	int i=0;
	do
	{
		if ((h->info)<0) 
		{	
			printf(Rus("Отрицательное значение очереди стека =%d и находится по ардресу %p\n"),h->info,h);
			i++;//счётчик отрицательных чисел
		}
		h=h->Next;		
	}
	while((h)&&(i<2));//добавляем в условие не более 2 отриц. чисел
eoln вне форума Ответить с цитированием
Старый 26.05.2010, 10:57   #3
kwns
 
Регистрация: 13.05.2010
Сообщений: 7
По умолчанию

Спасибо за помощь!
kwns вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка Матриц(Упорядочивание Элементов,Вывод На Экран Матриц При Условии...) timepoka Помощь студентам 8 01.07.2011 13:20
Нахождение квадратов первых k элементов массива JaZZ_XVIII Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 10.06.2009 01:21
Найти максимальный из положительных элементов матрицы и сумму отрицательных элементов. bessonov12 Microsoft Office Excel 7 04.05.2009 05:44