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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.12.2011, 23:16   #1
revaldo666
Форумчанин
 
Регистрация: 24.06.2010
Сообщений: 251
По умолчанию Сравнение строк

Всем добрый вечер.
Проблема заключается в следующем, есть функция которая сравнивает 2 строки и если есть совпадение то выводит на экран, однако когда ввожу для сравнения строку с пробелом например Olivier Megaton то запускается бесконечный цикл.
Вот код для ввода строки
Код:
if(choise==1)
        {
                cout<<"Введите имя автора"<<endl;
                cin.getline(text,40);
                SerchByAuthor(film,text,SIZE);
        }
и код функции сравнения
Код:
void SerchByAuthor (CFilm * f,char * author, int size)
{
        bool tru=false;
        for(int i=0;i<SIZE;i++)
        {
                if(stricmp(f[i].getauthor(),author)==0)
                {
                        f[i].show();
                        tru=true;
                }
        }
        if(tru==false)
        cout<<"Nothing"<<endl;
}
revaldo666 вне форума Ответить с цитированием
Старый 05.12.2011, 00:58   #2
Сыроежка
Форумчанин
 
Регистрация: 01.07.2011
Сообщений: 423
По умолчанию

Цитата:
Сообщение от revaldo666 Посмотреть сообщение
Всем добрый вечер.
Проблема заключается в следующем, есть функция которая сравнивает 2 строки и если есть совпадение то выводит на экран, однако когда ввожу для сравнения строку с пробелом например Olivier Megaton то запускается бесконечный цикл.
Вот код для ввода строки
Код:
if(choise==1)
        {
                cout<<"Введите имя автора"<<endl;
                cin.getline(text,40);
                SerchByAuthor(film,text,SIZE);
        }
и код функции сравнения
Код:
void SerchByAuthor (CFilm * f,char * author, int size)
{
        bool tru=false;
        for(int i=0;i<SIZE;i++)
        {
                if(stricmp(f[i].getauthor(),author)==0)
                {
                        f[i].show();
                        tru=true;
                }
        }
        if(tru==false)
        cout<<"Nothing"<<endl;
}
В вашей функции нигде нет бескоенчного циклв. Так что вам еще предстот уточнить, в каком месте ваша программа "зависает". Может быть у вас некорректно написана функция-член show? Я также обратил внимание, что в функции SerchByAuthor объявлен параметр size, но он нигде в функции не используется.
Со мной можно встретиться на www.clipper.borda.ru
Сыроежка вне форума Ответить с цитированием
Старый 05.12.2011, 11:32   #3
revaldo666
Форумчанин
 
Регистрация: 24.06.2010
Сообщений: 251
По умолчанию

SIZE объявлен как дефайн а SerchByAuthor находится в цикле do while и вызывается при нажатии определённых клавиш.
вот цикл
Код:
do{
	cout<<"1.Отобразить весь список"<<endl;
	cout<<"2.Редактировать элемент"<<endl;
	cout<<"3.Поиск"<<endl;
	cout<<"4.Сохранить"<<endl;
	cout<<"6.Выход"<<endl;
cin>>choise;
if(choise==1)
{
	show(film);
}
if(choise==2)
{
	cout<<"Введите ID фильма"<<endl;
		cin>>choise;
	cout<<"Введите название фильма"<<endl;
		cin>>text;
	film[choise-1].setname(text);
	cout<<"Введите имя автора"<<endl;
		cin>>text;
	film[choise-1].setauthor(text);
	cout<<"Введите цену"<<endl;
		cin>>da;
	film[choise-1].setcost(da);
	cout<<"Введите дату выпуска выпуска (ДД.ММ.ГГГГ)"<<endl;
		cin>>d>>m>>y;
		film[choise-1].setdata(d,m,y);
}

if(choise==3)
{
	
		
	cout<<"1.Поиск по режисёру"<<endl;
	cout<<"2.Поиск по названию"<<endl;
	cout<<"3.Поиск по цене"<<endl;
	cout<<"4.Поиск по году"<<endl;
	cin>>choise;
	if(choise==1)
	{
		cout<<"Введите имя автора"<<endl;
		cin>>text;
		SerchByAuthor(film,text,SIZE);
	}
	if(choise==2)
	{
		cout<<"Введите название фильма"<<endl;
		cin>>text;
		SerchByName(film,text,SIZE);
	}
	if(choise==3)
	{
		cout<<"Введите сумму денег"<<endl;
		cin>>choise;
		SerchByCost(film,choise,SIZE);
	}
	if(choise==4)
	{
		cout<<"Введите год"<<endl;
		cin>>choise;
		SerchByYear(film,choise,SIZE);
	}
	
}


}while(choise!=6);
вот метод show
Код:
void CFilm::show()
{

	cout<<"id:	"<<id<<"\nAuthor:	"<<author<<"\nFilm:	"<<name<<"\nCost:	"<<cost<<" UAH"<<"\nDate:	"<<getdata().GetYear()<<" year"<<endl
		<<"-----------------------------------------------------------------------------"<<endl;
}

Последний раз редактировалось revaldo666; 05.12.2011 в 11:34.
revaldo666 вне форума Ответить с цитированием
Старый 05.12.2011, 14:32   #4
Сыроежка
Форумчанин
 
Регистрация: 01.07.2011
Сообщений: 423
По умолчанию

Цитата:
Сообщение от revaldo666 Посмотреть сообщение
SIZE объявлен как дефайн а SerchByAuthor находится в цикле do while и вызывается при нажатии определённых клавиш.
вот цикл
Код:
do{
	cout<<"1.Отобразить весь список"<<endl;
	cout<<"2.Редактировать элемент"<<endl;
	cout<<"3.Поиск"<<endl;
	cout<<"4.Сохранить"<<endl;
	cout<<"6.Выход"<<endl;
cin>>choise;
if(choise==1)
{
	show(film);
}
if(choise==2)
{
	cout<<"Введите ID фильма"<<endl;
		cin>>choise;
	cout<<"Введите название фильма"<<endl;
		cin>>text;
	film[choise-1].setname(text);
	cout<<"Введите имя автора"<<endl;
		cin>>text;
	film[choise-1].setauthor(text);
	cout<<"Введите цену"<<endl;
		cin>>da;
	film[choise-1].setcost(da);
	cout<<"Введите дату выпуска выпуска (ДД.ММ.ГГГГ)"<<endl;
		cin>>d>>m>>y;
		film[choise-1].setdata(d,m,y);
}

if(choise==3)
{
	
		
	cout<<"1.Поиск по режисёру"<<endl;
	cout<<"2.Поиск по названию"<<endl;
	cout<<"3.Поиск по цене"<<endl;
	cout<<"4.Поиск по году"<<endl;
	cin>>choise;
	if(choise==1)
	{
		cout<<"Введите имя автора"<<endl;
		cin>>text;
		SerchByAuthor(film,text,SIZE);
	}
	if(choise==2)
	{
		cout<<"Введите название фильма"<<endl;
		cin>>text;
		SerchByName(film,text,SIZE);
	}
	if(choise==3)
	{
		cout<<"Введите сумму денег"<<endl;
		cin>>choise;
		SerchByCost(film,choise,SIZE);
	}
	if(choise==4)
	{
		cout<<"Введите год"<<endl;
		cin>>choise;
		SerchByYear(film,choise,SIZE);
	}
	
}


}while(choise!=6);
вот метод show
Код:
void CFilm::show()
{

	cout<<"id:	"<<id<<"\nAuthor:	"<<author<<"\nFilm:	"<<name<<"\nCost:	"<<cost<<" UAH"<<"\nDate:	"<<getdata().GetYear()<<" year"<<endl
		<<"-----------------------------------------------------------------------------"<<endl;
}
Я вам говорил не про SIZE а про параметр size. Читайте внимательно, что вам пишут.
Проверьте также, рне используется ли где-нибудь в коде функция getline И после предложения cin>>choise; вставьте печать значения choise, может быть она у вас 0 равно.

И вообще, научитесь сами отлаживать свои примитивные программы, а не подлнимать панику и отвлекать других.
Со мной можно встретиться на www.clipper.borda.ru
Сыроежка вне форума Ответить с цитированием
Старый 05.12.2011, 17:23   #5
revaldo666
Форумчанин
 
Регистрация: 24.06.2010
Сообщений: 251
По умолчанию

параметр size неважен собственно говоря, при вводе имени и фамилии автора в переменную text строка вводится только до пробела, всё что после пробела обрезается. подскажите как исправить это?
revaldo666 вне форума Ответить с цитированием
Старый 05.12.2011, 18:02   #6
Сыроежка
Форумчанин
 
Регистрация: 01.07.2011
Сообщений: 423
По умолчанию

Цитата:
Сообщение от revaldo666 Посмотреть сообщение
параметр size неважен собственно говоря, при вводе имени и фамилии автора в переменную text строка вводится только до пробела, всё что после пробела обрезается. подскажите как исправить это?
Вот поэтому у вас и бесконечный цикл. В буфере ввода остаются не прочитанные символьные знаки, и когда следующий раз вы пытаетесь считать чсило, то оно получает значение 0, так как в буфере нет цифр.
Надо использовать getline, если хотите прочитать предложение. Но при этом также езабывать, что символ новой строки остаетается в буфере, который перед чтением нового числа надо удалять.
Со мной можно встретиться на www.clipper.borda.ru
Сыроежка вне форума Ответить с цитированием
Старый 05.12.2011, 18:27   #7
revaldo666
Форумчанин
 
Регистрация: 24.06.2010
Сообщений: 251
По умолчанию

А можете на примере показать если не сложно, ато я что-то не сильно понял суть..
revaldo666 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сравнение строк в C++ Camaro Chevelle Помощь студентам 5 13.11.2011 23:38
Сравнение строк Hemul Общие вопросы C/C++ 5 19.11.2010 20:36
Сравнение строк в С++ Китти Общие вопросы C/C++ 2 12.10.2010 16:56
Макрос на сравнение и подсчет в первом столбце строк, и сумирование значений этих строк в другом столбце Shpr0T Microsoft Office Excel 8 30.08.2010 17:52
Сравнение строк в Си Maiden Помощь студентам 2 29.07.2010 12:45