Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> класс. ввод данных 
:(
    Опции темы
zhenya1
Дата 26.9.2010, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 20.9.2010

Репутация: нет
Всего: нет



Пробдема: как сделать так, чтобы полсе ввода name вылазило, типа: " сколько у него должно быть value(s)?", ввести эти значения  и перейти к вводу следующего имени и у него опять вводить кол-во значений и т.д.
Т.е. я сам хочу контролировать, сколько у каждого name должно быть значений.
Код

class bank
{   
private:
    char *bank_name;
    char **name;
    int *value;
public:
    bank(){}
    void add(int );
    void show(int );
};
void bank::add(int n)
{
    bank_name=new char[33];
    cout<<"input bank_name\n"<<endl;
    cin>>bank_name;

    char str[55];
    name=new char *[n];
    value=new int [n];
for(int i=0;i<n;i++)
{
    system("cls");
    cout<<i<<":iput name:\n"<<endl;
    cin>>str;
    name[i]=new char[strlen(str)+1];
    strcpy(name[i],str);
    cout<<"input value:"<<endl;
    cin>>value[i];
}
system("cls");
}
void bank::show(int n)
{
    cout<<bank_name<<endl;
    for(int i=0;i<n;i++)
    cout<<name[i]<<" "<<value[i]<<endl;
}

void main()
{
    char **name='\0',*bank_name='\0';int *value=0;
    int n;
    bank object;
    cout<<" size (n):"<<endl;
    cin>>n;
    bank obj;
    obj.add(n);
    obj.show(n);
    system("PAUSE");
    delete []name;
    delete []bank_name;
    delete []value;
}

PM MAIL   Вверх
djamshud
Дата 26.9.2010, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 4
Всего: 39



В коде бардак. Он работает, но бьюсь об заклад, вы даже не представляете, как именно. А если представляете, то неверно. Also, memory leak detected.

...

Сделайте int **value, для него value=new int*[n], а потом:
Код

cout<<"input amount of values:";
int vc;
cin>>vc;
value[i]=new int[vc];
for(int j=0;j<vc;j++){
cout<<"values["<<j,"]=";
cin<<value[i][j];}


Но лучше не следуйте моему решению, а спросите, как решить вашу задачу правильно и понятно.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
zhenya1
Дата 26.9.2010, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 20.9.2010

Репутация: нет
Всего: нет



Да, это, безусловно, так как я хотел. Огромная благодарность. Но смотрите: при выводе информации у меня проблемка, а т.е цикл, скажем, при 1-ом вводе vc стабильно выводит имя и его значения. При втором тоже. А вот если  vc(1) и vc(2) не равны(а это вполне вероятно) полсе первого вывода имени и его значений, если скажем, vc(1)<vc(2), начнет заполнять лишнее место чем-то. Как избежать эту проблему. Может я не правильно вывожу?

пример:   для 2-ух человек. Первому я задал vc =2, второму vc=3; Результат:

  zhenya
 1
 2
 -338676019 // не должно сдесь ведь заполнять  чем-то;
  vasya
  4
  5
  6

Код

void bank::show(int n)
{
    cout<<bank_name<<endl;
    for(int i=0;i<n;i++)
    {
    cout<<name[i]<<"\n";
    for(int j=0;j<vc;j++)
cout<<value[i][j]<<"\n";
    }
}

PM MAIL   Вверх
djamshud
Дата 26.9.2010, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 4
Всего: 39



Ну коли вам нравится такой подход,.. сделайте int *vc=new int[n], и запоминайте в нем количество записей для каждого человека.

Еще эти числа можно хранить в начале каждого массива value[i], но тогда под эти массивы нужно будет выделять на +1 элемент памяти больше и заполнять их не с 0 индекса, а с 1. И выводить естественно тоже.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
zhenya1
Дата 27.9.2010, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 20.9.2010

Репутация: нет
Всего: нет



Цитата

Еще эти числа можно хранить в начале каждого массива value[i], но тогда под эти массивы нужно будет выделять на +1 элемент памяти больше и заполнять их не с 0 индекса, а с 1. И выводить естественно тоже. 

Не могли бы Вы подробнее пояснить как это делается?

Код

class bank
{   
private:
    char *bank_name;
    char **name;
    int **value;
    int **salary;
public:
    bank(){}
    void add(int );
    void show(int );
};
int vc;
void bank::add(int n)
{
    bank_name=new char[33];
    cout<<"input bank_name\n"<<endl;
    cin>>bank_name;

    char str[55];
    name=new char *[n];
    value=new int *[n];
    salary=new int *[n];
for(int i=0;i<n;i++)
{
    system("cls");
    cout<<i<<":iput name:\n"<<endl;
    cin>>str;
    name[i]=new char[strlen(str)+1];
    strcpy(name[i],str);

    cout<<"input amount of values:";
cin>>vc;
value[i]=new int[n+1];
salary[i]=new int[n+1];
for(int j=1;j<vc;j++)
{
    cout<<"values:"<<j<<endl;
cin>>value[i][j];
cout<<"salary:"<<endl;
cin>>salary[i][j];
}
}
system("cls");
}
void bank::show(int n)
{
    cout<<bank_name<<endl;
    for(int i=0;i<n;i++)
    {
    cout<<name[i]<<"\n";
    for(int j=1;j<vc;j++)
    {
   cout<<value[i][j]<<" "<<salary[i][j]<<endl;
    }
    }
}

void main()
{
    char **name='\0',*bank_name='\0';int *value=0;
    int n;
    bank object;
    cout<<" size (n):"<<endl;
    cin>>n;
    bank obj;
    obj.add(n);
    obj.show(n);
    system("PAUSE");
    delete []name;
    delete []bank_name;
    delete []value;
}

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0451 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.