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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.05.2011, 03:27   #1
zhenya.ya
Форумчанин
 
Регистрация: 29.11.2009
Сообщений: 142
По умолчанию вывод полей класса после сравнения С++

Проблема: (Нужно отыскать нужный фильм и вывести данные об нем.) Если еще конкретнее, то почему после успешного сравнения некорректно выводятся данные об фильме: название выводится правильно, а вот жанру фильма почемуто ставится в соотвествие данные следующего за ним поля ??
(Ход решения и 2 скрина с входными данными и результатом работы см.ниже).

Имеется класс "фильмы" с полями назвиние, жанр и т.д.

Код:
class films{        
  char **film_name;        // название фильма
  char **film_genre;              // жанр
  char **playing_the_main_roles; 
  ...
};
Так я заполняю эти поля:

Код:
for( int i=0;i<2;i++) // к примеру, 2 фильма
        {
             film_name = new char *[1000];
        film_genre = new char *[1000];
 
             cout<<" input the name of film:"<<endl;
        fgets(Fname,80,stdin);
        film_name[i] = new char [strlen(Fname)+1];
        strcpy(film_name[i],Fname);
 
        cout<<" input film genre: "<<endl;
        fgets(Genre,80,stdin);
        film_genre[i] = new char [strlen(Genre)+1];
        strcpy(film_genre[i],Genre);
        ...
Вот тут я хочу отыскать нужный фильм и вывести данные об нем:

Код:
cout<<" input film`s name: ";
        fgets(str,80,stdin);
        for(i=0;i<2;++i)
                if(strcmp(str,film_name[i])==0)
                {
                        cout<<"Congratulation! Film was found! "<<endl;
 
                        cout<<"name: "<<film_name[i];
                        cout<<"genre: "<<film_genre[i];
                                         ............
Изображения
Тип файла: jpg Безымянный.jpg (19.1 Кб, 121 просмотров)
Тип файла: png Безымянный2.png (2.6 Кб, 15 просмотров)
zhenya.ya вне форума Ответить с цитированием
Старый 24.05.2011, 07:38   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
char **film_name;
А почему двойной указатель? И почему не используешь string раз уж в С++ пишешь?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.05.2011, 08:09   #3
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А почему двойной указатель? И почему не используешь string раз уж в С++ пишешь?
Потому что класс, прошу прощения за каламбур, объявляется как структура из трех двумерных динамических массивов.
После чего, как я понимаю, создается единственный объект этого класса, и с ним работают, как с тремя массивами символьных строк в стиле С.
Видимо, ТС не совсем правильно воспринял концепцию классов.
Вместо того, чтобы создать массив (вектор, список, множество -- нужное подчеркнуть) объектов класса, был создан объект класса, содержащий массивы.

По-крайней мере, у меня создалось именно такое впечатление...
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062

Последний раз редактировалось Mandrivnyk; 24.05.2011 в 08:44.
Mandrivnyk вне форума Ответить с цитированием
Старый 24.05.2011, 14:22   #4
zhenya.ya
Форумчанин
 
Регистрация: 29.11.2009
Сообщений: 142
По умолчанию

Вы имели в виду как-то так ? Но теперь я не понимаю как отыскать нужный фильм.
Код:
class base
{
	string film_name;
	string film_genre;
public:
	base(){}
	base(string film_name2,string film_genre2)
	{
		film_name = film_name2;
		film_genre = film_genre2;
	}
	void print()
	{
		cout<<film_name<<" "<<film_genre<<endl;
	}
};


	void main(){
		string fio1,genre1; int n;
		cout<<" how mach:"<<endl;
		cin>>n;
		list<base> obj(n,base(fio1,genre1));
		for(int i=0;i<n;i++)
		{
		cout<<" input>"<<endl;
		cin>>fio1;
		cin>>genre1;
		obj.push_back(base(fio1,genre1));
		}
	list<base>::iterator pos;
	for(pos=obj.begin();pos!=obj.end();++pos)
		(*pos).print();
	system("pause");
}
zhenya.ya вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
tasm32 не выполняет событие после сравнения строк функцией апи DarkLogic Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 08.01.2011 20:45
копирование всех полей класса Juffin Общие вопросы Delphi 1 19.05.2009 19:16
перезапись значений в файле.txt после сравнения SarahConner Общие вопросы Delphi 0 21.03.2009 00:19
Сортировка после просчета вычисляемых полей azat БД в Delphi 4 19.01.2008 21:09
сравнение текущего года и месяца с годом и месяцем поступления, а после сравнения записать номер курса Таня84 БД в Delphi 5 11.06.2007 13:53