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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.09.2010, 11:54   #1
yugik
Пользователь
 
Аватар для yugik
 
Регистрация: 04.01.2010
Сообщений: 23
По умолчанию Потоковая запись в файл

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

Код:
#include <iostream>
#include <fstream>
#include <vector>
#include <stdio.h>
#define FILE_DESTINATION "phonebook.txt"
using namespace std;

const int DefaultSize = 50;
class Company
{
private:
	char *CompanyName;
	char *CompanyOwner;
	char *CompanyPhone;
	char *CompanyAddress;
	char *CompanyIndustry;
public:
	Company ();
	Company (char *n, char *o, char *p, char *a, char *i);
	char getCompanyName ()
	{
		return *CompanyName;
	}
	char getCompanyOwner ()
	{
		return *CompanyOwner;
	}
	char getCompanyPhone ()
	{
		return *CompanyPhone;
	}
	char getCompanyAddress ()
	{
		return *CompanyAddress;
	}
	char getCompanyIndusrty ()
	{
		return *CompanyIndustry;
	}

};

Company::Company ()
{
	CompanyName = new char [DefaultSize];
	CompanyName[0] = '\0';
	CompanyOwner = new char [DefaultSize];
	CompanyPhone = new char [DefaultSize];
	CompanyAddress = new char [DefaultSize];
	CompanyIndustry = new char [DefaultSize];
}
Company::Company (char *n, char *o, char *p, char *a, char *i)
{
	CompanyName = new char [strlen(n)+1];
	CompanyName[0]='\0';
	strcpy(CompanyName,n);
	CompanyOwner = new char [strlen(o)+1];
	strcpy (CompanyOwner,o);
	CompanyPhone = new char [strlen(p)+1];
	strcpy (CompanyPhone,p);
	CompanyAddress = new char [strlen(a)+1];
	strcpy (CompanyAddress,a);
	CompanyIndustry = new char [strlen(i)+1];
	strcpy (CompanyIndustry,i);
}

class PhoneBook
{
private:
	vector <Company> comp;
public:
	PhoneBook () {}
	void AddCompany ();
	void SearchCompany ();
	void WriteToFile ();
	void PrintAll ();
};
void PhoneBook::AddCompany()
{
	char n [DefaultSize];
	char o [DefaultSize];
	char p [DefaultSize];
	char a [DefaultSize];
	char i [DefaultSize];
	cout << "\nInput company name: ";
	cin.getline(n,DefaultSize);
	cout << "\nInput company owner:  ";
	cin.getline(o,DefaultSize);
	cout << "\nInput company number (xxx-xx-xx): ";
	cin.getline(p,DefaultSize);
	cout << "\nInput company address: ";
	cin.getline(a,DefaultSize);
	cout << "\nInput company industry: ";
	cin.getline(i,DefaultSize);
	comp.push_back(Company(n,o,p,a,i));
	cout << "\n";
}
void PhoneBook::WriteToFile()
{
	fstream f (FILE_DESTINATION, ios::app);
	for (int i=0;i<comp.size();i++)
	{
		f << comp[i].getCompanyName() << endl;
		f << comp[i].getCompanyOwner() << endl;
		f << comp[i].getCompanyPhone() << endl;
		f << comp[i].getCompanyAddress() << endl;
		f << comp[i].getCompanyIndusrty() << endl;
	}
	f.close();
}
void PhoneBook::PrintAll()
{
	for (int i=0; i<comp.size(); i++)
	{
		cout << comp[i].getCompanyName() << endl;
		cout << comp[i].getCompanyOwner() << endl;
		cout << comp[i].getCompanyPhone() << endl;
		cout << comp[i].getCompanyAddress() << endl;
		cout << comp[i].getCompanyIndusrty() << endl;
	}
}


void main ()
{
	Company t;
	PhoneBook book;
	book.AddCompany();
	book.PrintAll();
	book.WriteToFile();
}
yugik вне форума Ответить с цитированием
Старый 08.09.2010, 12:14   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
	char *getCompanyName ()
	{
		return CompanyName;
	}
Понял смысл?
Для проверки вот легкий примерчик подобный твоему механизму:
Код:
char *c="sadsadasda";
char *gec(){return c;}
int _tmain(int argc, _TCHAR* argv[])
{
	fstream f("c:\\temp\\qq", ios::app);
	f<<gec();
	f.close();
	return 0;
}
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.09.2010, 12:29   #3
yugik
Пользователь
 
Аватар для yugik
 
Регистрация: 04.01.2010
Сообщений: 23
По умолчанию

Спасибо )) реально помогло, но в чем прикол? Почему функция должна быть по ссылке?
yugik вне форума Ответить с цитированием
Старый 08.09.2010, 13:21   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Как я понимаю у тебя же поле, возвращаемое из функции является указателем? Так вот его нужно разименовывать.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запись в файл и.т.п. pa6kevi4 Общие вопросы .NET 2 24.06.2010 11:00
запись в файл gamer123 Паскаль, Turbo Pascal, PascalABC.NET 6 09.06.2010 08:25
запись в файл iwaniwan Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 10 02.06.2009 23:24
Запись в файл soonner Общие вопросы Delphi 5 21.03.2009 01:12
Запись в файл [Smarik] Помощь студентам 4 07.05.2008 23:26