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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.10.2012, 00:42   #1
MrBlackD
 
Регистрация: 15.10.2012
Сообщений: 3
По умолчанию Организация динамической памяти

Здравствуйте. Собственно написал программу(класс который хранит данные о сотруднике),но в итоге понял,что с указателями у меня не очень. Особенно со строками char*. Сейчас основная проблема в том,что класс выводит вместо того что было введено с клавиатуры,какие то иероглифы.Собственно,по всему видимому проблема не в вывода,а в воде. Выкладываю весь код,ибо не знаю где именно у меня ошибка.А может она и не одна.
Код:
// individual.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include <iostream>
#include <cstring>
#include <fstream>

using namespace std;

struct data{
	char* jobname;
	int age;
	int wage;
};


class employee{
public:
	char* fio;
	data inf[10];
	int n;
public:
	employee();
	employee(const employee &A);
	void input();
	employee operator=(const employee &A);
	bool operator==(const employee &A);
	void max_wage();
	char* all_jobnames();
	friend ostream&operator <<(ostream &out,const employee&x);

};



int _tmain(int argc, _TCHAR* argv[])
{
	setlocale(LC_ALL,"RUS");
	employee Test;
	Test.input();
	
	cout<<Test;

	system("pause");
	return 0;
}

employee::employee(){
	fio=" ";
	cout<<"Введите количество мест работы не более 10"<<endl;
	cin>>n;
	if(n>10)n=10;
	for(int i=0;i<n;i++){
		inf[i].jobname=" ";
		inf[i].age=0;
		inf[i].wage=0;
	}
}

employee::employee(const employee &A){
	fio=A.fio;
	n=A.n;
	for(int i=0;i<n;i++){
		inf[i].jobname=A.inf[i].jobname;
		inf[i].age=A.inf[i].age;
		inf[i].wage=A.inf[i].wage;
	}
}



void employee::input(){
	cout<<"Введите ФИО сторудника:"<<endl;
	char tmp[30];
	cin>>tmp;
	fio=tmp;
	
	for(int i=0;i<n;i++)
	{
		cout<<"Введите место работы:"<<endl;
		cin>>tmp;
		inf[i].jobname=tmp;
		cout<<"Введите стаж работы:"<<endl;
		cin>>inf[i].age;
		cout<<"Введите заработную плату работы:"<<endl;
		cin>>inf[i].wage;
	}
	
}


employee employee::operator=(const employee &A){
	employee C(A);
	return C;
}

bool employee::operator==(const employee &A){
	if(n!=A.n)return false;
	if(fio!=A.fio)return false;
	for(int i=0;i<n;i++){
		if(inf[i].age!=A.inf[i].age)return false;
		if(inf[i].wage!=A.inf[i].wage)return false;
		if(inf[i].jobname!=A.inf[i].jobname)return false;
	}
	return true;
}

void employee::max_wage(){
	data inform;
	inform.age=inf[0].age;
	inform.jobname=inf[0].jobname;
	inform.wage=inf[0].wage;
	for(int i=1;i<n;i++)
	{
		if(inform.jobname>inf[i].jobname)
		inform.jobname=inf[i].jobname;
		if(inform.age>inf[i].age)
		inform.age=inf[i].age;
		if(inform.wage=inf[i].wage)
		inform.wage=inf[i].wage;
	}
	cout<<inform.jobname<<endl;
	cout<<inform.age<<endl;
	cout<<inform.wage<<endl;
}

char* employee::all_jobnames(){
	char*string="";
	for(int i=0;i<n;i++){
		strcpy(string,inf[i].jobname);
		strcpy(string,"---");
	}
	return string;
}



ostream& operator <<(ostream &out,const employee&x){
	
	out<<"----------------------"<<endl;
	out<<"ФИО сотрудника: "<<x.fio<<endl;
	for(int i=0;i<x.n;i++){
    out<<"Название места работы: "<<x.inf[i].jobname<<endl;
    out<<"Стаж: "<<x.inf[i].age<<endl;
    out<<"Зарплата: "<<x.inf[i].wage<<endl;
    
	}
	out<<"----------------------"<<endl;
    return out;


}
MrBlackD вне форума Ответить с цитированием
Старый 19.10.2012, 22:39   #2
LynXzp
Пользователь
 
Аватар для LynXzp
 
Регистрация: 04.10.2012
Сообщений: 95
По умолчанию

Цитата:
Выкладываю весь код,ибо не знаю где именно у меня ошибка.А может она и не одна.
Разделяй и властвуй. Разбей программу на 2 части, если в первой части будут ошибки то разбей ее еще раз. И далее в таком духе пока не найдешь строку с ошибкой.

Просто так в трезвом уме никто тебе не будет искать ошибки..
Пишу на чистом С, плюсы спилил.
LynXzp вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Массив в динамической памяти (С++) druger Помощь студентам 0 05.12.2011 10:13
Использование указателей и динамической памяти Black_butterfly Помощь студентам 3 02.05.2011 18:07
Кольцевая очередь на массиве в статической памяти с элементами в динамической памяти ]tach[ Общие вопросы C/C++ 1 19.01.2011 13:16
Организация динамической таблицы Kerguru Microsoft Office Access 2 02.12.2009 11:35
Проблема выделения динамической памяти в С++ oxygen90 Помощь студентам 3 14.09.2009 21:47