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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.04.2014, 22:10   #1
|DOCTOR|
Пользователь
 
Регистрация: 13.04.2014
Сообщений: 12
Печаль Проблема с программой на С++

Надо было создать класс зоомагазин с полями :животное, пол , кличка, цена.Ну и чтобы можно было выполнить ряд простейших функций , ввод, вывод, удаление .

Вот код :
Код:
#include <iostream>

#include <stdlib.h>
#include <string.h>
using namespace std;



class zoo
{
private:
	char an[30][30];//vid zoo
	char gen[30][30];//pol
	char name[30][30];//klichka
	int pri[30];//cena
     char anf[30];
     int i;//kol-vo zoo
public:
    void unit();
	void creat();//запись
	void show();//вывод всех животных
	void del();//удаление 
};
void zoo::unit()
{
     i=0;  return;
}
void zoo::creat()
{
	cout << "Enter vid" << endl;
	cin >> an[i];
	cout << "Enter pol" << endl;
	cin >> gen[i];
	cout << "Enter name" << endl;
	cin >> name[i];
cout << "Enter pri" << endl;
	cin >> pri[i];
      i=i+1;     return;}
void zoo::show()
{
   int z;
   for(z=0;z<i;z++)
   {
    cout << "vid: " << an[z]<< endl;
    cout << "pol: " << gen[z] << endl;
    cout << "name: " <<name[z] << endl;
    cout << "price: "<<pri[z] << endl;
    }return;
}
void zoo::del()
{
    int z,t;
	cout << "Enter vid ";
    cin >> anf;

	for(z=0;z<i;z++)
	{
	    if(strcoll(anf,an[z])==0)
	    {
	        for(t=0;t<30;t++)
	        strncpy(an[z],an[i],60);

	    i--;}

	}return;

}

int main()
{
	zoo z1;
	int i,x,y=4;
     z1.unit();
     i=0;
	while(y==4)
	{ x=0;
	cout << "1.Enter new animal" << endl;
	cout << "2.Sell animal" << endl;
	cout << "3.See the list of animals" << endl;
	cout << "4.Exit" << endl;
	cin >> x;
	if(x==1)
		{z1.creat();;}
	if(x==2)
		{z1.del();}
	if(x==3)
		{z1.show();}
	if(x==4) y--;
	}
	system("PAUSE");
	return 0;
}
Проблема возникла в функции del
Код:
                 if(strcoll(anf,an[z])==0)
	         {
	        for(t=0;t<30;t++)
	        strncpy(an[z],an[i],60);
                 ...
	             i--;}
Она как можно заметить не закончена . Смысл был в чем, чтобы удаляемое животное со всеми полями просто менялось с последним местами, и потом счетчик животных уменьшался на один . Но проблема в strncpy(an[z],an[i],60); . При копировании происходит видимо ошибка в памяти , или хз как назвать , но копирование вроде происходит , но появляются просто непонятные символы

Мб кто знает что не так , ибо я совсем запутался, или может быть кто то предложит свой вариант реализации этого

Последний раз редактировалось Stilet; 13.04.2014 в 22:28.
|DOCTOR| вне форума Ответить с цитированием
Старый 13.04.2014, 22:26   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
char an[30][30];//vid zoo
char gen[30][30];//pol
char name[30][30];//klichka
Чет я не понял зачем эти массивы нужны.
Это во-первых. Во-вторых может лучше использовать string ?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.04.2014, 00:23   #3
|DOCTOR|
Пользователь
 
Регистрация: 13.04.2014
Сообщений: 12
По умолчанию

Ну так куда записывается вид животного , его пол , его кличка

ну насчет этого не знаю, ибо можно сказать только начал С++ , так что библиотеки плохо знаю так же как и использование , поэтому думал обойтись по простому
|DOCTOR| вне форума Ответить с цитированием
Старый 14.04.2014, 08:17   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
Ну так куда записывается вид животного , его пол , его кличка
Э-э-э... Ты не понял
Записать кличку и вид животного можно в одномерный массив. А у тебя они двумерные.
И вообще нужно создать класс "Животное", описать для него эти поля. А в Zoo уже использовать массив или список классов Животное.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.04.2014, 22:07   #5
|DOCTOR|
Пользователь
 
Регистрация: 13.04.2014
Сообщений: 12
По умолчанию

Ну не в этом суть , то ладно уже, пусть так и будет , проблема вот в функции del , из за чего не происходит перемены массивов
|DOCTOR| вне форума Ответить с цитированием
Старый 14.04.2014, 22:17   #6
Desmoond
 
Аватар для Desmoond
 
Регистрация: 27.01.2013
Сообщений: 5
По умолчанию

Парень, во-первых, тема с количеством животных. Т.е. переменная i. Ты понимаешь, что один объект типа zoo содержит описание всего 1 животного, а это значит, что это переменная здесь лишняя, а если быть более точным, она некорректна, если тебе нужно записать много животных, то нужно создавать массив переменных типа zoo, т.е. zoo A[количество];

Про
Код:
char an[30][30];//vid zoo
char gen[30][30];//pol
char name[30][30];//klichka
int pri[30];//cena
char anf[30];
тебе верно сказали, тут не нужны двумерные массивы. Все реализуется через одномерный массив. И как я уже сказал, разумней будет сделать массив объектов типа zoo.


Либо реализовать структуру, в которой будет 2 вида переменных:
Массив zoo и как раз-таки тот счетчик заполненных элементов.


Код:
struct ar_zoo {
    zoo A[20];
    int i;
};
Сначала переделать весь класс, который представляет одно животное, подправить функции, объединить все объекты в массив и потом писать все остальное.
Так будет намного удобнее.

Последний раз редактировалось Desmoond; 14.04.2014 в 22:25.
Desmoond вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблема с программой skorpionsej Общие вопросы C/C++ 4 10.10.2012 17:21
Проблема с программой ZoomHz Общие вопросы C/C++ 6 13.03.2012 22:15
проблема с программой Олег093 Помощь студентам 1 21.04.2011 16:17
проблема с программой dima00 Общие вопросы Delphi 2 20.11.2007 13:56
Проблема с программой Dues Помощь студентам 1 19.11.2007 01:46