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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.11.2008, 17:48   #1
Барби
Форумчанин
 
Аватар для Барби
 
Регистрация: 19.12.2007
Сообщений: 159
Восклицание помогите убрать зацикливание с++,борланд

После компилирования выводится меню с предложением ввести цифру, после ввода цифры и названия происходит зацикливание и меню выводится бесконечное количество раз.

В самом низу где идет while ( input != 11) я понимаю что пока я не введу 11, это штука будет происходить, но я то хочу чтобы после ввода названия снова выводилось меню и причем только 1 раз а не бесконечность. Может скобки надо поставить или еще что нить поменять?
А еще я не знаю как сделать чтобы при новой компиляции не выводились все прошлый записи, ну то бишь какие волшебные буквы очистят экран? Помогите,пожалуйста!
Код:

#include <dos.h>
#include <iostream.h>
#include <stdio.h>
#include <graphics.h>
#include <math.h>
#include <conio.h>



	class	_uchebzaved
	{
		 public:
		char* n;
		char* o;
		char* t;



		void getnazvanie(char* nn);

		void setnazvanie(char* nn);
		void gettip(char* nt);

		void getobrazovanie(char* no);
		void print();



		void init();



	};


	void _uchebzaved::init( )
		{
			


			}

	void _uchebzaved::getnazvanie(char* nn )
	{
		     nn = n;


			}



	void _uchebzaved::setnazvanie(char* nn )
	{
		     n = nn;



}



	void _uchebzaved::gettip(char* nt )
	{
		    nt = t;



}




	void _uchebzaved::getobrazovanie(char* no )
	{
		     no = o;



}






	void _uchebzaved::print()
	{
		    cout << " Uchebnoe zavedenie: ";
		    cout << t;
		    cout << " Obrazovanie";

		    cout << o;
		    cout << "\n Nazvanie:", n;




}

		class	_wkola: public _uchebzaved
	{



		 public:

		void init();

	};

	 void _wkola::init()
		{

		       t = ":wkola" ;
		       o = " srednee";

			}

		class	_vuz: public _uchebzaved
	{



		 public:
		 char* d;

		void init();
		void getdekan(char* nd);
		void setdekan(char* nd);
		void print();
	};

	 void _vuz::init()
		{
		       t = " tip: vuz";
		       o = " obrazovanie: viswee/viswee aspirantskor";

			}

	    void _vuz::getdekan(char* nd)
	      {
		   nd = d;


	      }

	    void _vuz::setdekan(char* nd)
	      {
		   d = nd;


	      }


	    void _vuz::print()
	      {
			    cout << "\n Uchebnoe zavedenie: ", t,"Obrazovanie",o;
		    cout << "\n Nazvanie:", n;
		      cout << "\n Dekan:", d;

	      }



		class	_univer: public _vuz
	{



		 public:

		void init();
		void print();

	};

	 void _univer::init()
		{
		       t = "vuz" ;
		       o = "viswee/viswee aspirantskoe";

			}

	    void _univer::print()
	      {
			    cout << "\n Uchebnoe zavedenie: ", t,"Obrazovanie",o;
			    cout << t;
			    cout << " Obrazovanie: ";
			    cout << o;
		    cout << "\n Nazvanie:", n;
		      cout << "\n Dekan:", d;

	      }

		class	_institut: public _vuz
	{



		 public:

		void init();
                void print();

	};

	 void _institut::init()
		{
		       t = "vuz";
		       o = "viswee";

			}


	    void _institut::print()
	      {
			    cout << "\n Uchebnoe zavedenie: ", t,"Obrazovanie",o;
			     cout << t;
			    cout << " Obrazovanie: ";
			    cout << o;
		   cout << "\n Nazvanie:", n;
				      cout << "\n Dekan:", d;

	      }

	 typedef _uchebzaved *Uchebzaved;

	 typedef _wkola *Wkola;
	 typedef _vuz *VUZ;
	 typedef _univer *Univer;
	 typedef _institut *Institut;

char* main()
{
	char*  nn;

		char*  nt;
			char*  no;
int input;
char* input_str;
int input_int;

input = 0;

	     Uchebzaved  object = new _uchebzaved;

			Wkola object1 = new _wkola;

		Univer object2 = new _univer;

	Institut object3 = new _institut;



		object->init();
		object1->init();
		object2->init();
		object3->init();

while ( input != 11)

			{

			object1->print();

		object2->print();
		
		object3->print();

	cout<< " \n1. ystanovit nazvanie wkoli /  2. ystanovit nazvanie universiteta";
	cout<<  "\n 3. ystanovit nazvanie instituta / 4. ystanovit Dekana universiteta";
	cout<< "\n 5. ystanovit Dekana instituta / 6. ystanovit Uklon wkoli";
	cout<< "\n 7. ystanovit kolichestvo kafedr Universiteta / 8. ystanovit specializaciu aspiranturi Universiteta";
	cout<< "\n 9. ystanovit kolichestvo fakultetov Instityta / 10. ystanovit laboratoriuy Instituta";
	cout<< "\n 11. exit \n";
cin >> input;

switch (input)

{


case 1:


	cout<< "vvedite nazvanie: ";
cin >> input;

object->setnazvanie(nn);
getch;

case 2:
 

	cout<< "vvedite nazvanie: ";
cin >> input;

object1->getnazvanie(nn);

break;

case 3:
 

	cout<< "vvedite nazvanie: ";
cin >> input;

object3->getnazvanie(nn);

break;

		
		


 }
 }

}
Пока ремонтируют кукольный домик, живу на форуме.
Барби вне форума Ответить с цитированием
Старый 19.11.2008, 20:37   #2
ams007
Пользователь
 
Регистрация: 19.11.2008
Сообщений: 35
По умолчанию

функция очистки экрана - clrscr().
ams007 вне форума Ответить с цитированием
Старый 19.11.2008, 23:37   #3
Барби
Форумчанин
 
Аватар для Барби
 
Регистрация: 19.12.2007
Сообщений: 159
По умолчанию

спасибо, а как убрать зацикливание из этого кусочка, но чтобы после прохожения он повторялся и меня высвечивалось 1 раз?
char* main()
{
char* nn;

char* nt;
char* no;
int input;
char* input_str;
int input_int;

input = 0;

Uchebzaved object = new _uchebzaved;

Wkola object1 = new _wkola;

Univer object2 = new _univer;

Institut object3 = new _institut;



object->init();
object1->init();
object2->init();
object3->init();

while ( input != 11)

{

object1->print();

object2->print();

object3->print();

cout<< " \n1. ystanovit nazvanie wkoli / 2. ystanovit nazvanie universiteta";
cout<< "\n 3. ystanovit nazvanie instituta / 4. ystanovit Dekana universiteta";
cout<< "\n 5. ystanovit Dekana instituta / 6. ystanovit Uklon wkoli";
cout<< "\n 7. ystanovit kolichestvo kafedr Universiteta / 8. ystanovit specializaciu aspiranturi Universiteta";
cout<< "\n 9. ystanovit kolichestvo fakultetov Instityta / 10. ystanovit laboratoriuy Instituta";
cout<< "\n 11. exit \n";
cin >> input;

switch (input)

{


case 1:


cout<< "vvedite nazvanie: ";
cin >> input;

object->setnazvanie(nn);
getch;

case 2:


cout<< "vvedite nazvanie: ";
cin >> input;

object1->getnazvanie(nn);

break;

case 3:


cout<< "vvedite nazvanie: ";
cin >> input;

object3->getnazvanie(nn);

break;
Пока ремонтируют кукольный домик, живу на форуме.
Барби вне форума Ответить с цитированием
Старый 20.11.2008, 08:30   #4
ams007
Пользователь
 
Регистрация: 19.11.2008
Сообщений: 35
По умолчанию

cout<< "vvedite nazvanie: ";
cin >> input; //введенное название ты зачем-то помещаешь в INT(!!!!),
// а не в строку, т.о. вызвав косяки в стеке, благодаря
// чему у тебя получается какбы множественное нажатие
// на цифирьку в "меню"
object->setnazvanie(nn); // использование неинициализированной
// переменной - а борланд же на это ругался
// не такли?)
getch; // я х.з., но может быть getch()?, только зачем?????

И вообще - прежде чем кого-то спрашивать - нужно полистать самую элементарную книжку по С/С++ типа Березина. Я, например, не увидел ни одной правильной строки, т.е. у вас напрочь отсутствует правильное представление об указателях. Строка в Си - это не char *str ,
а char str[100], например.

ЗЫ: вообще не хотел отвечать, ибо прога - одна сплошная ошибка.
ams007 вне форума Ответить с цитированием
Старый 20.11.2008, 08:37   #5
ams007
Пользователь
 
Регистрация: 19.11.2008
Сообщений: 35
По умолчанию

case 1:


cout<< "vvedite nazvanie: ";
cin >> input;

object->setnazvanie(nn);

//НЕПРАВИЛЬНО!!!!
getch; // КАКОЙ НАФИГ getch, break;!!!!

case 2:


cout<< "vvedite nazvanie: ";
cin >> input;

object1->getnazvanie(nn);

break;

Разглядел))) У тебя вместо break после case 1 getch, хоть я и не понял, как это скомпилилось, нофакт!!! Т.е. при нажатии на 1 у тебя отрабатывают действия по 1 и по 2. А getch еще бензина в костер подливает, т к эт ф-я ввода символа без эха на экран.
ams007 вне форума Ответить с цитированием
Старый 20.11.2008, 08:40   #6
Ламер_001
Ну и что? :)
Форумчанин
 
Регистрация: 20.10.2008
Сообщений: 129
По умолчанию

while ( input != 11)

cout<< "\n 11. exit \n";
cin >> input;

cout<< "vvedite nazvanie: ";
cin >> input;
Учиться, учиться и еще раз учиться
Ламер_001 вне форума Ответить с цитированием
Старый 20.11.2008, 10:21   #7
Барби
Форумчанин
 
Аватар для Барби
 
Регистрация: 19.12.2007
Сообщений: 159
По умолчанию

Цитата:
ams007 cout<< "vvedite nazvanie: ";
cin >> input; //введенное название ты зачем-то помещаешь в INT(!!!!),
// а не в строку, т.о. вызвав косяки в стеке, благодаря
// чему у тебя получается какбы множественное нажатие
// на цифирьку в "меню"

спасибо, поправила.


Цитата:
object->setnazvanie(nn); // использование неинициализированной
// переменной - а борланд же на это ругался
// не такли?)
не ругается, но и параметр мой не передается. насколько я понимаю надо инициализировать след. образом
object->setnazvanie(char nn[100]);
а вот на это уже ругается и не компилируется.

Цитата:
getch; // я х.з., но может быть getch()?, только зачем?????
ну надо же пробовать все чтоб заработала. думала а вдруг поможет

Цитата:
И вообще - прежде чем кого-то спрашивать - нужно полистать самую элементарную книжку по С/С++ типа Березина. Я, например, не увидел ни одной правильной строки, т.е. у вас напрочь отсутствует правильное представление об указателях. Строка в Си - это не char *str ,
а char str[100], например.
и книжки читаю и примерные задачи просматриваю, и пусть неправильно и с ошибками, зато я сама делаю и потом обязательно исправлю ошибки и буду делать правильно, не все же сразу получается. но я стараюсь.
все строки поправила, спаисбо.

Цитата:
ЗЫ: вообще не хотел отвечать, ибо прога - одна сплошная ошибка.
спаисбо огромное за ответ

Цитата:
object->setnazvanie(nn);

//НЕПРАВИЛЬНО!!!!
почему???? из-за неинициализированной переменной? на (char nn[100]);
где инициализированно ругается.

Цитата:
getch; // КАКОЙ НАФИГ getch, break;!!!!
ну это я тоже пробовала,а вдруг заработает


Цитата:
while ( input != 11)

cout<< "\n 11. exit \n";
cin >> input;

cout<< "vvedite nazvanie: ";
cin >> input;
спасибо поправила.
Пока ремонтируют кукольный домик, живу на форуме.
Барби вне форума Ответить с цитированием
Старый 20.11.2008, 11:12   #8
Барби
Форумчанин
 
Аватар для Барби
 
Регистрация: 19.12.2007
Сообщений: 159
По умолчанию

подскажите,а почему параметры не хотят передаваться. вроде все правильно, ну вернее раз не передается значит точно что-то не правильно, но вот что.
Код:
 void _uchebzaved::getnazvanie(char nn[100] )
	{
		     nn = n;


			}



	void _uchebzaved::setnazvanie(char nn[100] )
	{
		     n = nn;



}
описала процедуры приравнивания переменной которая будет вводится к переменной название.

Код:
 case 1:


	cout<< "vvedite nazvanie: ";
cin >> input_str;

object->setnazvanie(nn);
break;
а тут прошу это название вставится.

ну почему оно не вставляется?ну почемууууу? :-(
Пока ремонтируют кукольный домик, живу на форуме.
Барби вне форума Ответить с цитированием
Старый 20.11.2008, 13:12   #9
Барби
Форумчанин
 
Аватар для Барби
 
Регистрация: 19.12.2007
Сообщений: 159
По умолчанию

каким образом регистриция домена может мне помочь? или вам денежку за каждый клик дают?
Пока ремонтируют кукольный домик, живу на форуме.
Барби вне форума Ответить с цитированием
Старый 20.11.2008, 14:49   #10
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,365
По умолчанию

Цитата:
Сообщение от Барби Посмотреть сообщение
ну почему оно не вставляется?ну почемууууу? :-(
Потому что вы неправильно присваваете строки друг другу. Я тут немного подправила, но только с родительским классом. Правда, я ничего не поняла, что же вы конкретно хотели от цикла, поэтому он у меня такой, как нравится мне. Внимательно читайте комментарии. Будут вопросы - задавайте.
Код:
/*библиотеки убрала, чтоб не мешались, подключите потом при необходимости*/
#include <iostream.h>
#include <windows.h>
#include <conio.h>

/*можно раскомментировать все закомментированные строки кода и 
закомментировать строки под ними - тоже все будет работать.
Только если в классе переменная n у вас динамическая (char * n), то ОБЯЗАТЕЛЬНО
раскомментируйте тело функции init в 25 строке*/

class	_uchebzaved
{
public:
	//char* n;
	char n[100];
	void setnazvanie(char nn[100]);
	//void setnazvanie(char* nn);
	void print();
	void init();
};

void _uchebzaved::init()
{
	//n = new char[100];
}

void _uchebzaved::setnazvanie(char nn[100])
//void _uchebzaved::setnazvanie(char* nn)
{
	//вот так строки присваиваются друг другу
	strcpy(n,nn); 
}

void _uchebzaved::print()
{
	//если нужно вывести несколько переменных, то перечисляем их 
	//не через запятую, а через <<. Например, cout << a << b << c;
    cout << "Название:" << n;
}

	
typedef _uchebzaved *Uchebzaved;

void main()
{
	//следующие две строки для подключения русского языка 
	//если он все-таки не отображается, то в запущенной программе
	//правой кнопкой мыши щелкните на заголовке окна, выберите пункт
	//меню "Свойства", вкладку "Шрифт" и выставите шрифт Lucida Console
	SetConsoleCP(1251); 
	SetConsoleOutputCP(1251);

	int input;
	
	//char nn[100];
	char * nn = new char[100]; //если объявили динамическую переменную, то
								//нужно выделить под нее память оператором new

	Uchebzaved  object = new _uchebzaved;
	object->init();
	do
	{
		system("cls"); //очищаем экран
		cout<< " \t\t\tМеню \n1. Установить название учебного заведения \n0. Выход\n";
		cin >> input;
		switch (input)
		{
		case 1:
			{
				cout<< "Введите название: ";
				//тут нужно вводить название одним словом, 
				//потому что cin берет строку до первого пробела
				cin >> nn; 
				object->setnazvanie(nn);
				object->print();
				getch();
			}
			break;
		}
	}
	while (input != 0); 
}
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать

Последний раз редактировалось ACE Valery; 20.11.2008 в 14:53.
ACE Valery вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите убрать пустое место sstyle HTML и CSS 15 01.03.2010 16:58
Помогите убрать последствия вируса N!ckeL Безопасность, Шифрование 4 28.05.2008 16:55
Простые лабораторные работы на борланд делфи 7 (оплата веб мани) Eternity Помощь студентам 1 06.06.2007 13:36
подпрограмма в Борланд Паскаль Jasper Паскаль, Turbo Pascal, PascalABC.NET 1 05.12.2006 20:40